使用多个部分词的全文搜索
Full Text Search Using Multiple Partial Words
我有一个 sql 服务器数据库,里面有医学描述。我已经为它创建了一个全文索引,但我仍在弄清楚它是如何工作的。
最简单的例子是如果有Hypertensive heart disease
的描述
现在他们希望能够输入 hyp hea
作为搜索词,然后 return 那个。
所以从我读到的内容来看,我的查询似乎需要类似于
DECLARE @Term VARCHAR(100)
SET @Term = 'NEAR(''Hyper*'',''hea*'')'
SELECT * FROM Icd10Codes WHERE CONTAINS(Description, @Term)
如果我去掉 Hypertensive 和 heart 的通配符,然后输入完整的单词,它就可以工作,但是在 return 中添加通配符什么都没有。
如果有任何不同,我正在使用 Sql Server 2017
这会起作用:
SELECT * FROM Icd10Codes where SOUNDEX(description)=soundex('Hyp');
SELECT * FROM Icd10Codes where DIFFERENCE(description,'hyp hea')>=2;
你可以试试like语句。您可以找到详尽的解释 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, '"hyper*" NEAR "hea*"')
这里的关键是我需要双引号 "
而不是单引号。我以为这是两个单引号,第一个转义第二个,但实际上是双引号。上面的查询returns结果完全符合预期。
我有一个 sql 服务器数据库,里面有医学描述。我已经为它创建了一个全文索引,但我仍在弄清楚它是如何工作的。
最简单的例子是如果有Hypertensive heart disease
现在他们希望能够输入 hyp hea
作为搜索词,然后 return 那个。
所以从我读到的内容来看,我的查询似乎需要类似于
DECLARE @Term VARCHAR(100)
SET @Term = 'NEAR(''Hyper*'',''hea*'')'
SELECT * FROM Icd10Codes WHERE CONTAINS(Description, @Term)
如果我去掉 Hypertensive 和 heart 的通配符,然后输入完整的单词,它就可以工作,但是在 return 中添加通配符什么都没有。
如果有任何不同,我正在使用 Sql Server 2017
这会起作用:
SELECT * FROM Icd10Codes where SOUNDEX(description)=soundex('Hyp');
SELECT * FROM Icd10Codes where DIFFERENCE(description,'hyp hea')>=2;
你可以试试like语句。您可以找到详尽的解释 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, '"hyper*" NEAR "hea*"')
这里的关键是我需要双引号 "
而不是单引号。我以为这是两个单引号,第一个转义第二个,但实际上是双引号。上面的查询returns结果完全符合预期。