【问题标题】:Full Text Search Using Multiple Partial Words使用多个部分词进行全文搜索
【发布时间】:2019-04-20 01:19:33
【问题描述】:

我有一个 sql server 数据库,里面有医学描述。我已经在上面创建了一个全文索引,但我仍在弄清楚它是如何工作的。

最简单的例子是如果有Hypertensive heart disease的描述

现在他们希望能够输入 hyp hea 作为搜索词并让它返回。

所以从我读到的内容看来,我的查询需要类似于

DECLARE @Term VARCHAR(100)
SET @Term = 'NEAR(''Hyper*'',''hea*'')'
SELECT * FROM Icd10Codes WHERE CONTAINS(Description, @Term)

如果我将 Hypertensive 和 heart 的通配符取出,并输入它有效的完整单词,但添加通配符不会返回任何内容。

如果有什么不同,我使用的是 Sql Server 2017

【问题讨论】:

    标签: sql sql-server stored-procedures full-text-search wildcard


    【解决方案1】:

    所以这是一个奇怪的语法问题,没有导致错误,但阻止了搜索工作。

    我改成

    SELECT * FROM Icd10Codes where CONTAINS(description, '"hyper*" NEAR "hea*"')

    这里的关键是我需要双引号 " 而不是单引号。我以为它是两个单引号,第一个转义第二个,但它实际上是双引号。上面的查询完全按照预期返回结果。

    【讨论】:

      【解决方案2】:

      这将起作用:

      SELECT * FROM Icd10Codes where SOUNDEX(description)=soundex('Hyp');
      
      SELECT * FROM Icd10Codes where DIFFERENCE(description,'hyp hea')>=2;
      

      【讨论】:

      • 这不起作用,它返回了一个具有以下值的行:Typhoid and paratyphoid fevers。字母 hea 不在其中。
      • 我需要它来返回两个单词相邻的行。
      【解决方案3】:

      您可以尝试类似的声明。你可以找到详尽的解释here

      像这样:

      SELECT * FROM Icd10Codes WHERE Icd10Codes LIKE '%hyp hea%';
      

      然后不要把字符串放在那里,而是使用一个变量。

      如果您需要搜索分隔的部分单词,例如在一组搜索词中,这会有点棘手,因为您需要动态构建 SQL 语句。

      MSSQL 为全文搜索提供了一些功能。你可以找到那些here。其中之一是CONTAINS 关键字:

      SELECT column FROM table WHERE CONTAINS (column , 'string1 string2 string3');
      

      【讨论】:

      • 我不能使用您的第一个建议,因为这将符合我需要的结果。这是两个词尾缺失的部分词。你的第二个给我一个错误。 SELECT * FROM Icd10Codes where CONTAINS(description, 'hyp hea')Syntax error near ''hea'' in the full-text search condition ''hyp' 'hea''. (Line 1)
      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      • 2016-08-11
      相关资源
      最近更新 更多