【问题标题】:SQL Server Stopword returns no rowsSQL Server 停用词不返回任何行
【发布时间】:2014-07-22 11:09:06
【问题描述】:

我正在使用 SQL Server 2012,但我遇到了 FTS 搜索问题。

有一个表[Table],我为它创建了一个fts索引

CREATE FULLTEXT INDEX ON [TABLE](Column1 LANGUAGE 1033, Column2 LANGUAGE 1033,    Column3 LANGUAGE 1033, Description LANGUAGE 1033, Column4 LANGUAGE 1033) 
KEY INDEX KEY_PK
ON FTSCATALOG
WITH CHANGE_TRACKING = AUTO,
STOPLIST = MyStopList

但是当我尝试通过停用词查找行时,我得到 0 行。看来它根本不使用停止列表

select OBJECT_ID('TABLE'),* from sys.fulltext_indexes;

告诉索引正在工作

114099447   114099447   1   5   1   A   AUTO    1   U   UPDATE_CRAWL    2014-06-02 17:04:01.050 2014-06-02 17:04:02.073 0x000000000001FFF2  5   NULL    1

SELECT * FROM sys.dm_fts_parser ('and', 1033, 5, 0)

表明“and”是一个停用词

keyword group_id    phrase_id   occurrence  special_term    display_term    expansion_type  source_term

0x0061006E0064  1   0   1   Noise Word  and 0   and

但是

 SELECT * FROM dbo.[TABLE] WHERE CONTAINS (*, 'and', LANGUAGE 1033)

返回 0 行。

有人知道为什么会这样吗?

【问题讨论】:

    标签: sql sql-server full-text-search stop-words


    【解决方案1】:

    我认为您误解了停用词是什么以及它们是如何使用的。 documentation 在这个问题上非常清楚。

    停用词在创建全文索引时从文档中删除。因此,它们不在索引中,对它们的搜索将不会删除任何匹配项。事实上,它们也从查询中删除。因此,对单词 'and' 的查询与什么都不搜索相同。这就是为什么没有返回任何内容。

    尝试搜索文本中实际存在的更有趣的词。

    【讨论】:

    • 谢谢,如果只有停用词,我希望它应该返回所有行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多