FREETEXT不使用同义词库文件SQL Server 2012

时间:2012-05-29 02:45:39

标签: sql sql-server sql-server-2008 sql-server-2012 freetext

根据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使用了同义词库文件。我做错了什么?

1 个答案:

答案 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。