SQL全文搜索在CLP单词后无效

时间:2018-06-08 13:20:19

标签: sql full-text-search

如果我有一个表,其中包含varchar(max)全文索引列,并且我在列中添加了以下内容 'CLP3 365 367',那么你无法搜索365或367。 containsstable(mytable,,'“365 ”')命令不提供任何数据。

如果我将字段设置为'clp3 365 367',一切都很好。 如果没有CLP(upcase)那么一切正常。顺便说一下,数据库不区分大小写。

如果我在'CLP'之前放了一些东西,那么FTS会找到它。在CLP之后它找不到任何单词。

'CLP'是某种神奇的关键词吗? FTS的语言是中立的,没有停止列表。 此脚本仅提供2条记录,而不是3条记录。

create table fts_test (id int identity(1,1) , fts varchar(max))
create  unique index fts_ind on fts_test (id)
insert into fts_test (fts) 
values ('CLP3 365 367'), ('clp3 365 367'), ('365 CLP3 367')
cREATE FULLTEXT INDEX ON fts_test (fts) key index fts_ind with stoplist=system;
select * from containstable(fts_test, *, '"365*"') 

1 个答案:

答案 0 :(得分:0)

Microsoft支持“解决了”问题。

CLP是智利的货币。

当我们使用任何一种货币代码(例如:USD,INR,ZAR等)时,都可以看到相同的行为。”

因此,在任何货币代码(大写)及其后的数字之后,都找不到以下数字。如果货币代码后有单词,则全文搜索将找到它并在其后找到数字。

我的解决方案是将文本中的任何货币代码都转换为小写。 (因为我们不需要此功能,并且我们的数据库不区分大小写)。