【问题标题】:SQL Server full-text search using thesaurus and prefix form togetherSQL Server 全文搜索同时使用词库和前缀形式
【发布时间】:2013-11-10 07:07:11
【问题描述】:

这是一个在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 谓词不支持星号。

【问题讨论】:

  • 这个运气好吗?我也有类似的问题。

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


【解决方案1】:

确实,您不能将* 与 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>

【讨论】:

  • 当我在寻找WordA(不是Word)时,我想得到WordBbbaaa bar。此短语是用户输入的,我无法裁剪收到的单词。
猜你喜欢
  • 2014-07-22
  • 2015-06-15
  • 2011-07-23
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多