根据MSDN,我在编辑同义词库文件后执行了此操作,该文件将英文文件(tseng.xml
)加载到同义词库中:
EXEC sys.sp_fulltext_load_thesaurus_file 1033;
GO
同义词库文件的迷你样本部分
<XML ID="Microsoft Search Thesaurus">
<thesaurus xmlns="x-schema:tsSchema.xml">
<diacritics_sensitive>0</diacritics_sensitive>
<expansion>
<sub>car</sub>
<sub>coche</sub>
<sub>automobile</sub>
<sub>ride</sub>
</expansion>
</thesaurus>
</XML>
索引列c.keywords字段包含'bike,car'快速检查查询:
DECLARE @strsearch varchar(200)
SET @strsearch = 'automobile'
SELECT adid from ads INNER JOIN campaign c ON ads.campid=c.campaignid
WHERE
FREETEXT(c.keywords, @strsearch)
RESULTS
========
ad NULL
寻找'汽车'的自由文本确实有效
DECLARE @strsearch varchar(200)
SET @strsearch = 'car'
SELECT adid from ads INNER JOIN campaign c ON ads.campid=c.campaignid
WHERE
FREETEXT(c.keywords, @strsearch)
RESULTS
========
ad 41
因此使用同义词库的FREETEXT不会返回任何结果。我认为默认情况下FREETEXT使用了同义词库文件。我做错了什么?
答案 0 :(得分:3)
直接来自MSDN(http://msdn.microsoft.com/en-us/library/cc280598.aspx):
:一种。加载同义词库文件,即使它已经加载
以下示例解析并加载英语同义词库文件。
EXEC sys.sp_fulltext_load_thesaurus_file 1033;
GO
<强> B中。仅在尚未加载同义词库文件时加载
以下示例解析并加载阿拉伯语同义词库文件,除非它已经加载。
EXEC sys.sp_fulltext_load_thesaurus_file 1025, @loadOnlyIfNotLoaded = 1;
GO
我使用的是tseng.xml文件。那么,有两个英文同义词库文件:tseng.xml和tsenu.xml
tseng.xml适用于英语(英国),而tsenu.xml适用于英语(美国)。 LCID(1033)对应于tsenu.xml文件
保存时的XML文件必须是Unicode格式,并且必须指定字节顺序标记,而不是ansi或UTF-8。我使用了Microsoft记事本并将tsenu.xml文件保存为Unicode。