Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql全文搜索包含()_Sql_Sql Server_Full Text Search_Contains_Keyword - Fatal编程技术网

sql全文搜索包含()

sql全文搜索包含(),sql,sql-server,full-text-search,contains,keyword,Sql,Sql Server,Full Text Search,Contains,Keyword,我在两个不同的数据库上复制了这个问题,所以这可能是一个一般性问题 基本上,我们在一个表上使用全文搜索,比如说我们有一个表customer,它有ID、name、address等列。全文搜索在“名称”列上 以下脚本仅适用于“部分”行 select name, * from customer where contains(name, N' "foo bar" ') 如果客户名称为foobar,则将返回该名称。但如果客户名称为“GET”,则不会返回,即 select name, * from c

我在两个不同的数据库上复制了这个问题,所以这可能是一个一般性问题

基本上,我们在一个表上使用全文搜索,比如说我们有一个表customer,它有ID、name、address等列。全文搜索在“名称”列上

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

select name, * 
from customer 
where contains(name, N' "foo bar" ')
如果客户名称为foobar,则将返回该名称。但如果客户名称为“GET”,则不会返回,即

select name, * 
from customer 
where contains(name, N' "GET" ') 
这不会返回该行,但如果我将名称的值更改为
“get”
,则它将返回

非常奇怪,也许
“GET”
是一个关键字,全文搜索不喜欢它?我没有找到任何与此相关的文档


有什么方法可以绕过它吗?

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

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

select * from sys.fulltext_system_stopwords where language_id=1033
ALTER FULLTEXT INDEX ON customer SET STOPLIST = OFF
您可以关闭索引的停止列表,如下所示:

select * from sys.fulltext_system_stopwords where language_id=1033
ALTER FULLTEXT INDEX ON customer SET STOPLIST = OFF
运行上述查询并再次尝试运行对
get
的搜索,查看是否返回任何结果


关于停止词和停止列表的更多信息可以在这里找到:。

为什么不使用-->where name,比如“%foo bar%”?我使用MSSQL,我知道可以使用like%%进行部分匹配,但由于我在名称上有一个索引,我想用全文搜索进行更快的搜索。我有一个列,其中包含一些ID,它们之间用管道“12 | 332 | 5 | 44”分隔。我把头撞在墙上,想弄明白为什么CONTAINS(Filters,'5')没有返回任何记录。是的。在我的情况下,禁止名单是无关紧要的。按照你的建议把它关掉。