SQL Server全文搜索使用同义词库和前缀形式一起使用

时间:2013-10-30 15:21:46

标签: sql sql-server full-text-search thesaurus formsof

以下是FTSdata字段上的全文搜索示例表:

CREATE TABLE dbo.tTest (Id INT, FTSdata VARCHAR(100));

INSERT INTO dbo.tTest (Id, FTSdata) VALUES
(1, 'foo WordA'),
(2, 'foo WordAaabbb'),
(3, 'WordB bar'),
(4, 'WordBbbaaa bar');

无论用户输入“WordA”还是“WordB”,我都希望找到所有这些记录。

我的词库看起来像这样:

<expansion>
    <sub>WordA</sub>
    <sub>WordB</sub>
</expansion>

我需要像

这样的东西
SELECT *
FROM dbo.tTest
WHERE CONTAINS(FTSdata, 'FORMSOF (THESAURUS, "WordA*")');

但遗憾的是,FORMSOF谓词不支持星号。

1 个答案:

答案 0 :(得分:2)

确实你不能将*与THESAURUS一起使用,但你可以这样做。
查询

    SELECT FTSdata
    FROM dbo.tTest2
    WHERE CONTAINS(FTSdata, 'FORMSOF (THESAURUS, Word) OR "Word*"')

这将返回您为“Word”一词定义的任何词库以及以“Word”开头的任何词语

我使用此查询返回的重新集合如下:
结果集

FTSdata
foo WordA
foo WordAaabbb
WordB bar
WordBbbaaa bar

FTS XML文件

<expansion>
    <sub>Word</sub>
    <sub>WordA</sub>
    <sub>WordB</sub>
</expansion>