【问题标题】:CONTAINS in full-text search does not return all results全文搜索中的 CONTAINS 不返回所有结果
【发布时间】: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

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

【问题讨论】:

    标签: sql-server full-text-search contains


    【解决方案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个位置的索引。
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多