【问题标题】:CONTAINSTABLE adding 'of*' returns no resultsCONTAINSTABLE 添加 'of*' 不会返回任何结果
【发布时间】:2014-04-01 11:20:43
【问题描述】:

我在 SQL Server 2008 上有一个包含表的查询:

SELECT contacts.*, [Rank] FROM 
CONTAINSTABLE(Contacts, SearchName, '("department*") AND ("work*")') tmp 
JOIN contacts on contacts.contactid = tmp.[key]
WHERE contacts.deleted = 0

这会按预期返回 1 个结果,但是如果用户在其搜索条件中输入“of”,则查询不会返回任何结果:

SELECT contacts.*, [Rank] FROM 
CONTAINSTABLE(Contacts, SearchName, '("department*") AND ("of*") AND ("work*")') tmp 
JOIN contacts on contacts.contactid = tmp.[key]
WHERE contacts.deleted = 0

联系记录的全称是“工作和养老金部门”。

如果用户在搜索中包含“and”,也会发生同样的情况。为什么这些词会破坏查询,有没有办法解决它,还是我必须在执行搜索之前去掉这些词?

【问题讨论】:

    标签: sql sql-server sql-server-2008 containstable


    【解决方案1】:

    您需要了解停用词。这些在documentation 中有很好的解释。

    不过,简短的解释是,所有全文引擎都会保留一个未编入索引的单词列表。在这些词中突出的是诸如“of”、“the”和类似的不包含内容的词。当然,您可以配置服务器以实际识别这些单词。这在某些应用程序中非常重要:在尝试确定文档的语言时,停用词恰好非常有用。

    在任何情况下,单词“of”都在停用词列表中。所以它没有被索引,你无法使用CONTAINSTABLE 找到它。如果需要搜索,可以实现自己的自定义停用词列表并重建索引。

    【讨论】:

      猜你喜欢
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 2017-12-09
      • 2020-10-03
      • 2017-03-19
      • 2017-05-20
      相关资源
      最近更新 更多