多字词包含仅在SQL Server

时间:2016-01-11 07:37:04

标签: sql-server full-text-search contains

我使用的是SQL Server 2012,并为COMPANY表中的NAME列创建了全文索引。我测试的所有搜索都具有以下格式(可搜索的字数可变),按任意顺序的单词开头进行匹配:

select id, name from company where contains(name, '"ka*" AND "de*"')

问题在于,有些情况下此查询不会返回任何结果,即使它应该是完美匹配。例如,当公司名称是" ka de we oy"时,上面的示例返回一个匹配但是'" ka *" AND" de *"和"我们*"'没有,也没有搜索所有四个单词'。

还有其他情况,奇怪的是,即使使用确切的单词,搜索也不会返回结果。这似乎与很短(两个字母)的单词有关。使用多个(6个以上)单词进行搜索时也存在一些问题。

对单个查询中的单词数量有一些明确的限制,或者它们有多短?我该如何解决或解决这个问题?

编辑:似乎是某些常见的英语单词完全被排除在索引之外(例如'我们在示例中)。这是一个问题,因为它要求一些常见词语绝对应该是可搜索的。有没有办法改变哪些单词没有被索引或者例如改变语言'应用不同的常用单词集的索引?

1 个答案:

答案 0 :(得分:1)

显然,这只是定义正确的停用词/停止列表的一种情况:

https://msdn.microsoft.com/en-us/library/ms142551.aspx

https://msdn.microsoft.com/en-us/library/cc280405.aspx

或者将列的全文索引语言设置为实际语言,以便英语单词不会导致问题。

编辑:实际上,最简单的方法就是完全禁用表格的停止列表:

ALTER FULLTEXT INDEX ON公司SET STOPLIST = OFF

希望这有助于其他人