簡體   English   中英

具有多個條件的全文本搜索

[英]Full text search with multiple criteria

我有兩個表:

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


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

我需要從第一個表中篩選出包含短語表的Text列中的值的行,並且不包括同一行的ExcludedText值。

表之間不存在任何關系,對於FirstTable每一行,我必須檢查每個現有組合(包括Text,不包括ExcludedText)。

您可以根據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表的大小。 如果很大,將會影響性能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM