我正在构建一个带有SQL后端的C#/ ASP.NET应用程序.我正在截止日期并完成我的页面,在左侧字段中,我的一位设计师在我的一个页面上整合了全文搜索.直到此时我的"搜索"都是过滤器,能够通过某些因子和列值缩小结果集.
因为我正处于截止日期(你知道每晚睡3个小时,在我看起来像是吃了什么东西并且扔掉了),我期待这个页面与其他人非常相似,我正在尝试决定是否发臭.我以前从未在页面上进行过全文搜索....这是一座可以登山的山还是有一个简单的解决方案?
谢谢.
首先,您需要在生产服务器上启用全文搜索索引,因此如果这不在范围内,您不会想要使用它.
但是,如果已经准备就绪,全文搜索相对简单.
T-SQL有4个谓词用于全文搜索:
FREETEXT
FREETEXTTABLE
CONTAINS
CONTAINSTABLE
FREETEXT是最简单的,可以这样做:
SELECT UserName FROM Tbl_Users WHERE FREETEXT (UserName, 'bob' ) Results: JimBob Little Bobby Tables
FREETEXTTABLE与FreeTEXT的工作方式相同,只不过它将结果作为表返回.
T-SQL全文搜索的真正力量来自CONTAINS(和CONTAINSTABLE)谓词......这个很大,所以我只是将它的用法粘贴在:
CONTAINS ( { column | * } , '< contains_search_condition >' ) < contains_search_condition > ::= { < simple_term > | < prefix_term > | < generation_term > | < proximity_term > | < weighted_term > } | { ( < contains_search_condition > ) { AND | AND NOT | OR } < contains_search_condition > [ ...n ] } < simple_term > ::= word | " phrase " < prefix term > ::= { "word * " | "phrase * " } < generation_term > ::= FORMSOF ( INFLECTIONAL , < simple_term > [ ,...n ] ) < proximity_term > ::= { < simple_term > | < prefix_term > } { { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ] < weighted_term > ::= ISABOUT ( { { < simple_term > | < prefix_term > | < generation_term > | < proximity_term > } [ WEIGHT ( weight_value ) ] } [ ,...n ] )
这意味着您可以编写如下查询:
SELECT UserName FROM Tbl_Users WHERE CONTAINS(UserName, '"little*" NEAR tables') Results: Little Bobby Tables
祝好运 :)