1

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

4

1 回答 1

3

直接来自 MSDN ( http://msdn.microsoft.com/en-us/library/cc280598.aspx ):

A. 加载同义词库文件,即使它已经加载

以下示例解析并加载英语词库文件。

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。

于 2012-06-01T07:20:57.343 回答