我正在构建一个带有SQL后端的C#/ ASP.NET应用程序。我正按时完成工作,并完成了我的页面,在我的其中一个页面上,我的一位设计师在左侧区域加入了全文搜索。到目前为止,我的“搜索”一直是过滤器,能够通过某些因素和列值来缩小结果集的范围。
由于我正按时完成任务(您知道一个晚上要睡3个小时,那时候我看上去就像猫吃了东西就扔了一样),所以我希望此页面与其他页面非常相似,因此我正在尝试决定是否发臭。我以前从未在页面上进行过全文搜索....这是要爬的山还是有简单的解决方案?
谢谢你。
首先,您需要在生产服务器上启用“全文本搜索”索引,因此,如果这不在范围之内,那么您就不希望这样做。
但是,如果已经准备好了,则全文搜索相对简单。
T-SQL有4个用于全文搜索的谓词:
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
祝你好运 :)