如果我有一个表,其中包含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*"')
答案 0 :(得分:0)
Microsoft支持“解决了”问题。
CLP是智利的货币。
当我们使用任何一种货币代码(例如:USD,INR,ZAR等)时,都可以看到相同的行为。”
因此,在任何货币代码(大写)及其后的数字之后,都找不到以下数字。如果货币代码后有单词,则全文搜索将找到它并在其后找到数字。
我的解决方案是将文本中的任何货币代码都转换为小写。 (因为我们不需要此功能,并且我们的数据库不区分大小写)。