Полнотекстовый поиск с использованием нескольких частичных слов - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть база данных 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 Server2017

Ответы [ 3 ]

0 голосов
/ 20 апреля 2019

Вы можете попробовать подобное утверждение.Вы можете найти подробное объяснение здесь .

Примерно так:

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

И затем вместо ввода строки просто используйте переменную.

Если вам нужно искать отдельные частичные слова, как в массиве поисковых терминов, это становится немного сложнее, поскольку вам нужно динамически создавать оператор SQL.

MSSQL предоставляет несколько функций для полного текстапоиск.Вы можете найти эти здесь .Одним из них является ключевое слово CONTAINS:

SELECT column FROM table WHERE CONTAINS (column , 'string1 string2 string3');
0 голосов
/ 22 апреля 2019

Так что это была странная проблема синтаксиса, которая не вызвала ошибку, но остановила поиск.

Я изменил его на

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

Ключ в том, что мне нужны двойные кавычки ", а не одиночные кавычки. Я предположил, что это были две одинарные кавычки, первая, чтобы избежать второй, но на самом деле это были двойные кавычки. Приведенный выше запрос возвращает результаты в точности так, как ожидалось.

0 голосов
/ 20 апреля 2019

это будет работать:

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

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