SQL Server 使用多个部分词的全文搜索

2g32fytz  于 2023-02-07  发布在  其他
关注(0)|答案(4)|浏览(285)

我有一个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

avkwfej4

avkwfej41#

因此,这是一个奇怪的语法问题,没有导致错误,但停止了搜索工作。
我改成了
SELECT * FROM Icd10Codes where CONTAINS(description, '"hyper*" NEAR "hea*"')
这里的关键是我需要双引号",而不是单引号。我假设它是两个单引号,第一个用于转义第二个,但实际上它是双引号。上面的查询返回的结果与预期完全相同。

mbjcgjjk

mbjcgjjk2#

这是可行的:

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

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

8zzbczxx3#

你可以试试like语句,你可以找到一个详尽的解释。
就像这样:

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

而不是把字符串放在那里,而是用一个变量。
如果您需要搜索分开的部分单词,比如在搜索词数组中,那么这就有点棘手了,因为您需要动态地构建SQL语句。
MSSQL为全文搜索提供了一些功能。您可以找到这些here。其中之一是CONTAINS关键字:

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

x7rlezfr4#

对我来说-这有更多的里程。创建一个计算行与字段作为全文搜索。全名/公司/姓氏都可搜索。

ALTER TABLE profiles ADD COLUMN fts tsvector generated always as (to_tsvector('english', coalesce(profiles.company, '') || ' ' || coalesce(profiles.broker, '') || ' ' || coalesce(profiles.firstname, '') ||  ' ' || coalesce(profiles.lastname, '') || ' ' )) stored;


      let { data, error } = await supabase.from('profiles')
      .select()
      .textSearch('fts',str)

相关问题