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

Gri*_*rim 6 sql sql-server full-text-search formsof thesaurus

这是一个在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');
Run Code Online (Sandbox Code Playgroud)

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

我的词库看起来像这样:

<expansion>
    <sub>WordA</sub>
    <sub>WordB</sub>
</expansion>
Run Code Online (Sandbox Code Playgroud)

我需要类似的东西

SELECT *
FROM dbo.tTest
WHERE CONTAINS(FTSdata, 'FORMSOF (THESAURUS, "WordA*")');
Run Code Online (Sandbox Code Playgroud)

但不幸的是,FORMSOF谓词不支持星号.

M.A*_*Ali 4

确实,您不能*与 THESAURUS 一起使用,但您可以执行类似的操作。
询问

    SELECT FTSdata
    FROM dbo.tTest2
    WHERE CONTAINS(FTSdata, 'FORMSOF (THESAURUS, Word) OR "Word*"')
Run Code Online (Sandbox Code Playgroud)

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

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

FTSdata
foo WordA
foo WordAaabbb
WordB bar
WordBbbaaa bar
Run Code Online (Sandbox Code Playgroud)

FTS XML 文件

<expansion>
    <sub>Word</sub>
    <sub>WordA</sub>
    <sub>WordB</sub>
</expansion>
Run Code Online (Sandbox Code Playgroud)