SQL Full Text Search如何实现排除指定精确匹配词的查询
全文搜索实现精确匹配排除的方案
实现逻辑
你要的NOT包含精确匹配的检索逻辑完全可以通过全文搜索实现。你当前逻辑会误筛BloodOranges相关记录的原因是默认全文检索会对长词做分词,BloodOranges会被拆分为Blood和Oranges两个独立分词项,所以不加限定的Oranges检索会命中包含该分词的所有记录。
全文搜索中用双引号包裹检索词即可指定精确短语匹配,只有字段中存在完整独立的对应词汇时才会被命中,再搭配NOT关键字就能实现你要的排除逻辑。
示例适配写法
针对你给出的场景,正确的查询语句如下:
SELECT * FROM Contacts WHERE NOT CONTAINS(taglist, '"Oranges"')
执行后会精准排除所有包含独立Oranges词汇的记录1、记录2,返回你预期的记录3、记录4。
多排除词的扩展写法
如果客户需要同时排除多个精确词汇,直接在CONTAINS的第二个参数里用OR拼接多个双引号包裹的检索词即可,例如同时排除Oranges和Apples的写法:
SELECT * FROM Contacts WHERE NOT CONTAINS(taglist, '"Oranges" OR "Apples"')
注意事项
如果你的taglist字段存储的标签前后可能存在空格(例如Oranges , Apples这类格式),建议在数据入库时先做标签的前后去空处理,避免空格导致精确匹配失效。
内容的提问来源于stack exchange,提问作者Master
相关产品推荐
相关产品推荐

