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

7

以下是一个示例表格,涉及到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谓词中不支持星号。


你有什么进展吗?我也遇到了类似的问题。 - Johnny Oshika
1个回答

4

确实你不能在 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 FILE

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

当我搜索“WordA”(而不是“Word”)时,我想要得到“WordBbbaaa bar”。这个短语是由用户输入的,我不能截取接收到的单词。 - GriGrim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接