全文搜索中的 CONTAINS 不返回所有结果

Posted

技术标签:

【中文标题】全文搜索中的 CONTAINS 不返回所有结果【英文标题】:CONTAINS in full-text search does not return all results 【发布时间】:2012-01-27 14:17:13 【问题描述】:

我在 SQL Server 2008 中使用全文搜索。以下查询

select * From MyTable where contains( *, 'FLOW AND VALVE')

返回两行:

1. FLOW CONTROL VALVE
2. FLOW VALVE

但是下面的查询

select * From MyTable where contains( *, '"FLOW AND VALVE"'))

只返回一行:

1. FLOW CONTROL VALVE

为什么第二个查询不返回第二行?

【问题讨论】:

【参考方案1】:

如果你使用的是 SQL Server 2008,你可以从运行中获得一些线索

SELECT * 
FROM sys.dm_fts_parser('FLOW AND VALVE',1033,0,0)

SELECT * 
FROM sys.dm_fts_parser('"FLOW AND VALVE"',1033,0,0)

CONTAINS( *, 'FLOW AND VALVE') 被解释为两个<simple_term> 搜索与布尔条件结合在一起。即CONTAINS( *, 'FLOW') AND CONTAINS( *, 'VALVE')

CONTAINS( *, '"FLOW AND VALVE"')) 被解释为短语搜索,其中“And”被忽略为干扰词。

至于为什么第二个匹配“FLOW CONTROL VALVE”而不匹配“FLOW VALVE”From this article

虽然它忽略了停用词的包含,但全文索引 确实考虑到了他们的立场。

所以本质上,停用词的存在充当通配符匹配。

【讨论】:

噪音词似乎与任何“单个”词匹配。例如第二个查询与此匹配:“FLOW CONTROL VALVE”但不匹配这些:“FLOW VALVE”“FLOW METER ADJUSTING VALVE”“VALVE FLOW”我在文档中找不到任何解释这一点的内容。 @unubar - 短语搜索具有“Flow”位置 1、“And”位置 2、“Valve”位置 3。由于“And”被忽略,它可能只是在后面有“阀门”2个位置的索引。

以上是关于全文搜索中的 CONTAINS 不返回所有结果的主要内容,如果未能解决你的问题,请参考以下文章

sql 全文搜索 CONTAINS() *有时* 没有结果

对于 CONTAINS 全文谓词,SQL Server 2008 中的逻辑短路似乎失败

使用联接的 SQL Server 全文搜索无法按预期工作

全文索引CONTAINS语法

包含多个世界的列中的全文搜索搜索

全文搜索引擎有那些、