【问题标题】:Contains search on the word "after" fails包含对单词“after”的搜索失败
【发布时间】:2020-01-17 19:58:50
【问题描述】:

基本上运行如下:

SELECT * 
FROM document 
WHERE contains(cachedText, 'after') 

返回 0 条记录,与任何包含单词 after 的搜索词相同。

正在搜索:

SELECT * 
FROM document 
WHERE cachedText like '%after%'

在我的数据集中返回大约 200k 条记录。只是想知道这是否有任何原因?

【问题讨论】:

  • 这可能与 CONTAINS 中的第二个参数是 nvarchar 的事实有关?
  • CONTAINS 是 SQL Server 中的全文搜索,它还定义了搜索时不考虑的 停用词 的列表 - 而且很有可能“之后”被认为是这些停用词之一,因此不会被发现。另请查看:stackoverflow.com/questions/8435602/…
  • 这两个查询完全不同。第一个是全文搜索查询,第二个是简单的模式匹配。如果 cachedText 不是 FTS 索引的一部分,第一个甚至可能不会运行。

标签: sql-server tsql


【解决方案1】:

第一个查询匹配单词“after”,即其他文本中的一个不同的单词。 (如果“after”在停用词列表中,则它会被完全忽略。)您可以在Full-Text Search 阅读有关详细信息。

第二个查询匹配“afternoon”、“crafters”、“dafter”、...,即任何包含“after”的字符串,无论分词如何。

检查第二个查询返回的匹配项,您可能会发现“after”嵌入在较长的单词中。

【讨论】:

  • 停止列表是问题所在,将其关闭以使表格正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多