Поиск по ключевым словам с использованием PostgreSQL - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь идентифицировать наблюдения по моим данным, используя список ключевых слов. Однако результаты поиска содержат наблюдения, в которых совпадает только часть ключевого слова. Например, ключевое слово ice возвращает varices. Я использую следующий код

select * 
from mytab
WHERE myvar similar to'%((ice)|(cool))%';

Я попробовал _tsquery, и он точно соответствует и не включает наблюдения с varices. Но этот подход требует значительно больше времени для запроса. (2 поиска по ключевым словам, похожих на '% %', занимают 5 секунд, тогда как _tsquery занимает 30 секунд при поиске по 1 ключевому слову. У меня более 900 ключевых слов для поиска)

select * 
from mytab
where myvar @@ to_tsquery(('ice'));

Существует ли способ запроса нескольких ключевых слов с помощью _tsquery и любой способ ускорить процесс запроса.

1 Ответ

0 голосов
/ 28 апреля 2018

Я бы предложил использовать ключевые слова в реляционном смысле, а не иметь их список под одним полем, что приводит к ужасной производительности. Вместо этого вы можете иметь таблицу ключевых слов с идентификаторами в качестве первичных ключей и иметь внешние ключи, относящиеся к первичным ключам mytab. Таким образом, вы получите следующее:

keywords table 
id | mytab_id | keyword  
----------------------
1      1        liver
2      1        disease
3      1        varices
4      2        ice

mytab table
id | rest of fields
---------------------
 1    ....
 2    ....

Затем можно выполнить внутреннее объединение, чтобы найти, какие ключевые слова относятся к указанным записям в mytab:

SELECT * FROM mytab JOIN keywords ON keywords.mytab_id = mytab.id WHERE keyword = 'ice'

Вы также можете добавить ограничение, чтобы убедиться, что пара keyword и mytab_id уникальна, чтобы случайно не получить один и тот же keyword для одной и той же записи в mytab.

...