使用 containstable 的 SQL 全文搜索返回 false 匹配

SQL fulltext search using containstable returns false match

提问人:DasMonopol 提问时间:11/6/2023 更新时间:11/6/2023 访问量:20

问:

我现在面临的问题是 SQL 中的全文搜索不会产生我期望的结果。containstable 方法返回的结果根本不包含提供的搜索词,我想知道为什么会这样。

我正在搜索的术语是“tubus”,它作为“tubus%”输入到查询中,如下所示:

SELECT 
    k.[Rank],
    si.Term
FROM CONTAINSTABLE(SearchIndex, Term, N'tubus%', LANGUAGE 1031) AS k
JOIN dbo.SearchIndex si ON k.[Key] = si.Id
LEFT JOIN dbo.Item i ON si.EntityId = i.Id AND si.EntityName = 'Item'
WHERE EntityName = 'Item'

SearchIndex 表只是一个包含名为 Term 的列的表,该列是指定实体的全文搜索中应包含的所有单词的组合字符串。 执行上述查询将产生以下结果:

术语
208 CO2-Schlauch mit Tubus-Adapter (für Respironics 3473ADU-00) MA18566 WDT 26332
208 Cuffill 气管管管Druckmesser LL MA17297 WDT 26271
208 d-grip Tubus-/Narkoseschlauchhalter MA15253 WDT 92904
208 iM3 Tubus-Fixierbänder aus Silikon, 50 Stück MA15389 WDT 28338
208 Kruuse Tracheotomie Tubus für Pferde MA8825 WDT 94585

我已将表中的错误结果标记为粗体,正如您所看到的,“tubus”一词根本没有出现在术语中。

到目前为止,我唯一尝试过的是使用正确的语言,就我而言是 LCID 1031 德语,但这根本没有改变结果。 我也广泛地环顾四周,但到目前为止,我发现的问题或答案都与我的具体问题无关。

我现在唯一的猜测是,我可能误解了使用 containstable 方法在 SQL 中进行全文搜索的行为,并且结果有时以某种方式“不准确”。 我只是SQL的初学者,所以请耐心等待,但如果有人知道为什么会发生前面描述的行为,请告诉我!我也很想知道这种行为是否符合预期以及为什么会这样。

搜索 字符串匹配 SQL-Server-2019 全文索引

评论

0赞 Charlieface 11/6/2023
%在全文搜索中不能用作通配符,也许您的意思是前缀搜索注意额外的双引号。另请参阅 learn.microsoft.com/en-us/sql/relational-databases/...N'"tubus*"'
0赞 DasMonopol 11/6/2023
啊,谢谢你的提醒!我尝试了更正后的输入,但结果似乎没有改变。
0赞 Charlieface 11/7/2023
FTS指数是用哪种语言构建的?

答: 暂无答案