sql - 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')
解决方案
在 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)
推荐阅读
- swift - Swift 中的“var”和“let”有什么区别?
- git - 不提交使用 git-svn 对 svn 所做的所有更改
- postgresql - 我可以使用表的返回类型加上不同表中的一列吗?
- excel - 在标题中查找匹配并偏移到 X 列数
- python - 尝试引用列范围时 Python 中的语法错误
- python-3.x - 有没有一种快速的方法来检查嵌套对象属性是否等于一个值?
- python - Django 模板从另一个字典键访问字典
- r - r h2o.deeplearning:使用权重时出错 - “weights_column”必须是字符类型,但得到数字
- python - 如何获取由逗号分隔的两部分的用户输入并将它们放入不同的列表中
- java - 如何修复 JES 中的“OutOfMemoryError: java.lang.OutOfMemoryError: Java heap space”