全文搜索中的 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 不返回所有结果的主要内容,如果未能解决你的问题,请参考以下文章