【问题标题】:Full text search - Not stopping StopWords全文搜索 - 不停止 StopWords
【发布时间】:2011-01-09 08:28:00
【问题描述】:

我使用 SQL Server 全文向导创建了全文索引,但是当我输入搜索词时,它不会忽略停用词。

即这将返回行:

SELECT *
FROM dbo.T_Restaurant AS Restaurant
JOIN dbo.SearchView AS SearchView ON SearchView.id = Restaurant.id
WHERE CONTAINS(SearchView.TotalSearchField, ' indian & bridgwater ')

但这不是:

SELECT *
FROM dbo.T_Restaurant AS Restaurant
JOIN dbo.SearchView AS SearchView ON SearchView.id = Restaurant.id
WHERE CONTAINS(SearchView.TotalSearchField, ' indian & in & bridgwater ')

我知道“in”在英语中是一个停用词,但似乎并没有被忽略。该索引根据其属性使用系统停用词列表。我是否错过了设置停用词列表的步骤?

非常感谢,

克里斯。

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案1】:

    这种 FTS 语法效果更好吗?我认为它将把印度和布里奇沃特当作一个短语,而不是寻找我认为你正在尝试做的词。

    SELECT *
    FROM dbo.T_Restaurant AS Restaurant
    JOIN dbo.SearchView AS SearchView ON SearchView.id = Restaurant.id
    WHERE CONTAINS(SearchView.TotalSearchField, '"indian" AND "bridgwater"')
    
    SELECT *
    FROM dbo.T_Restaurant AS Restaurant
    JOIN dbo.SearchView AS SearchView ON SearchView.id = Restaurant.id
    WHERE CONTAINS(SearchView.TotalSearchField, '"indian" AND "IN" AND "bridgwater"')
    

    【讨论】:

    • :( 遗憾的是,这也不起作用。感谢您的意见,非常感谢。
    • 早上我才能进入sql server;这会返回什么 select * from sys.dm_fts_parser (' "indian & in & bridgewater" ', 1033, 77,0) 它应该显示您的语言中的干扰词 - 假设 1033 是您的代码页。您可以使用 select [name], alias, lcid from master.sys.syslanguages 进行检查;
    • 感谢您迄今为止的帮助,伙计,我非常感谢您的宝贵时间。我已经运行了您建议的查询(对链接到我的索引的 StopListID 进行了编辑),这就是我得到的(删除了一些奇怪的列): 1 Exact Match indian 2 Noise Word in 3 Exact Match bridgwater Crazy,这显然是被识别为噪声词,但是当我用噪声词查询数据库时,它没有返回任何行。咕噜!
    • 最后的办法是使用 dmv 直接检查索引。我不记得语法,但检查 technet.microsoft.com/en-us/library/cc280607.aspx 你可以逐行检查以查看索引中的内容。
    • 我可以看到所有被索引的词,并且没有一个停用词在列表中(可能是因为填充过程将它们剔除了)。明天我会在网上做更多的挖掘,因为我今天可能没有时间。再次非常感谢,您的意见非常有价值。这种棘手的问题很难追根究底,最好能得到别人的意见。
    猜你喜欢
    • 2013-02-19
    • 2010-11-11
    • 2013-11-24
    • 1970-01-01
    • 2020-05-07
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多