【问题标题】:Full text search with multiple criteria具有多个条件的全文搜索
【发布时间】:2014-03-19 08:00:04
【问题描述】:

我有两张桌子:

FirstTable
===============================
Id int primary key identity ,
Text varchar(4000)


Phrase
===============================
Id int primary key identity ,
Text varchar(4000) ,
ExcludingText varchar(4000)

我需要从第一个表中过滤包含 Phrase 表的 Text 列的值的行,并且不包括同一行的 ExcludedText 值。

表格之间不存在任何关系,对于来自FirstTable 的每一行,我必须检查每个现有组合(包括 Text,不包括 ExcludedText)。

【问题讨论】:

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


    【解决方案1】:

    您可以根据Phrase 表的内容动态构建全文查询。

    declare @FullTextCondition as varchar(max)
    set @FullTextCondition = STUFF(
        (
            SELECT '"' + Text + '" AND NOT "' + ExcludingText + '" AND '
            FROM Phrase 
            FOR XML PATH(''), TYPE
        ).value('.', 'varchar(max)'),
        1, 0, ''
    )
    
    -- remove trailing ' AND '
    set @FullTextCondition = SUBSTRING(@FullTextCondition, 0, LEN(@FullTextCondition) - 3)
    
    -- now perform your full text search
    SELECT *
    FROM FirstTable
    WHERE CONTAINS(*, @FullTextCondition)
    

    例如,如果您的Phrase 表有以下数据:

    Id  Text       ExcludingText
    -------------------------------------
    1   good       bad
    2   ok         not ok
    

    那么您的全文查询 (@FullTextCondition) 将如下所示:

    '"good" AND NOT "bad" AND "ok" AND NOT "not ok"'
    

    当然,请考虑Phrase 表的大小。如果它非常大,那么它会影响性能

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 2015-12-06
      • 2016-08-15
      • 2011-03-21
      • 2014-12-03
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多