使用多个不完整词进行全文搜索

时间:2019-04-20 01:19:33

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

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

最简单的例子是是否有Hypertensive heart disease

的描述

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

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

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

如果我将通配符用于高血压和心脏,并输入完整的单词,但是在其中添加通配符将不返回任何内容。

如果有什么不同,我正在使用Sql Server 2017

3 个答案:

答案 0 :(得分:0)

这将起作用:

SELECT * FROM Icd10Codes where SOUNDEX(description)=soundex('Hyp');

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

答案 1 :(得分:0)

您可以尝试类似的陈述。您可以找到详尽的解释here

像这样:

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

然后使用一个变量代替将String放在其中。

如果您需要搜索分开的部分单词,例如在搜索项数组中,由于需要动态构建SQL语句,因此会有些棘手。

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

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

答案 2 :(得分:0)

这是一个奇怪的语法问题,没有引起错误,但是使搜索无法进行。

我将其更改为

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

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