【问题标题】:CONTAINSTABLE query not recognising small wordsCONTAINSTABLE 查询不识别小词
【发布时间】:2010-09-29 12:56:26
【问题描述】:

我正在使用CONTAINSTABLE 搜索两个表格列。一旦搜索包含像 'the' 'for' 'a' 这样的小词,即使它们实际出现在列中,搜索也不会返回任何结果。

快速示例。正在搜索的列包含文本。 '系统需要升级'

以下 SQL 返回 0 行

SELECT     * FROM Incident WHERE (TicketNumber IN (
SELECT TicketNumber FROM         [Action] FT_TBL INNER JOIN
CONTAINSTABLE(Action, Text, '"system" AND "needs" AND "to" AND "upgraded" AND NOT "Search Summary"') KEY_TBL ON FT_TBL.ID = KEY_TBL.[KEY]
UNION
SELECT TicketNumber FROM [Incident] FT_TBL INNER JOIN
CONTAINSTABLE(Incident, Subject, '"system" AND "needs" AND "to" AND "upgraded"') AS KEY_TBL ON FT_TBL.TicketNumber = KEY_TBL.[KEY]))

一旦 'to' 被省略,它就可以正常工作:

SELECT     * FROM Incident WHERE (TicketNumber IN (
SELECT TicketNumber FROM         [Action] FT_TBL INNER JOIN
CONTAINSTABLE(Action, Text, '"system" AND "needs" AND "upgraded" AND NOT "Search Summary"') KEY_TBL ON FT_TBL.ID = KEY_TBL.[KEY]
UNION
SELECT TicketNumber FROM [Incident] FT_TBL INNER JOIN
CONTAINSTABLE(Incident, Subject, '"system" AND "needs" AND "upgraded"') AS KEY_TBL ON FT_TBL.TicketNumber = KEY_TBL.[KEY]))

CONTAINSTABLE 如何与这些较小的词一起使用,或者应该完全省略它们?如果这些较小的词在搜索中实际上是有意义的,那么它们如何被包含在搜索中?

【问题讨论】:

标签: sql sql-server tsql containstable


【解决方案1】:

这些不是“小词”,它们是停用词表上的常用词。它们被忽略了。

请参阅 BOL 上的 Stopwords and Stoplists

【讨论】:

  • 谢谢。我有一个预感,就是这样,我在谷歌上搜索“CONTAINSTABLE 禁用词”以及“阻塞词”。感谢您的信息。
  • 显示这些文字:SELECT * FROM sys.fulltext_system_stopwords
【解决方案2】:

请参阅the end of my answer,了解如何创建和使用从空列表开始的自定义全文停止列表。我检查了一个空的,你的查询适用于“to”、“be”、“the”、“for”等。

更新:

SQL Server 2005 应该有 MSSQL\FTData\noiseENG.txt。
我建议查看question "Noise Words in Sql Server 2005 Full Text Search"的答案

【讨论】:

  • 在 SSMS 2005 中没有“全文停止列表”节点。它看起来像是 08 的新版本。无论如何,我们最终可能会升级到 2008,在这种情况下,我会尝试这个。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多