首页 > 解决方案 > SQL 全文搜索不包含精确

问题描述

在我的应用程序中,客户可以选择多个词从搜索中排除。这些词是针对 FullTextSearch 字段运行的。

我想知道是否有一种方法可以使 NOT contains与full-text search完全匹配

例如,该字段包含

Record 1 - `Oranges, Apples, BloodOranges`
Record 2 - `Oranges`
Record 3 - `BloodOranges`
Record 4 - `Apples`

如果客户对橙子进行过滤,它将过滤橙子和血橙。我希望它返回记录 3,4。

SELECT * 
FROM Contacts 
WHERE  Contains (taglist, 'Oranges') 

标签: sqlsql-serverssms

解决方案


在 SQL-Server 中,您可以使用CONTAINSTABLE
例如:
这将返回包含确切短语“Oranges”的联系人

SELECT *, k.[Rank]
FROM Contacts c
INNER JOIN CONTAINSTABLE([dbo].[Contacts], taglist, N'"Oranges"') as [k]
    ON c.Id = k.[Key]

对于你想要的,你可以写这样的东西:

;With CTE AS
(
    SELECT c.Id
    FROM Contacts c
    INNER JOIN CONTAINSTABLE([dbo].[Contacts], taglist, N'"Oranges"') as [k]
        ON c.Id = k.[Key]
)
Select * From Contacts CC
Where CC.Id not in (Select Id From CTE)

推荐阅读