sql全文搜索CONTAINS()*有时*不产生结果

问题描述 投票:1回答:1

我在2个不同的数据库上重现了这个问题,所以这可能是一个普遍问题。

基本上我们在表上使用全文搜索,比如我们有表客户,它有ID,名称,地址等列。全文搜索位于名称列上。

以下脚本仅适用于“部分”行

select name, * 
from customer 
where contains(name, N' "foo bar" ')

如果客户名称为foo bar,则会返回该名称。但如果客户名称是“GET”,那么它将不会被退回,即

select name, * 
from customer 
where contains(name, N' "GET" ') 

这不会返回行,但是如果我将名称的值更改为"GETS",那么它将返回。

很奇怪,也许"GET"是一个关键字,全文搜索不喜欢它?我没有找到任何关于此的文件。

有办法解决它吗?

sql sql-server full-text-search contains keyword
1个回答
2
投票

您的问题的答案非常简单:get是系统定义的停用词,因此在搜索过程中会被忽略。

您可以检查系统定义的停止列表中的单词,如下所示:

select * from sys.fulltext_system_stopwords where language_id=1033

您可以关闭索引的停止列表,如下所示:

ALTER FULLTEXT INDEX ON customer SET STOPLIST = OFF

运行上面的查询并尝试再次运行get搜索,看看是否返回任何结果。

有关停用词和停止列表的更多信息,请访问:Configure and Manage Stopwords and Stoplists for Full-Text Search

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.