Текстовый поиск с использованием postgresql - PullRequest
0 голосов
/ 03 января 2019

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

Для этого я создал таблицу с названием компании и столбцом с объединенным названием компании и названиями подразделений, разделенных пробелами.

Сначала я попробовал полнотекстовый поиск по столбцу, но в запросе FTS результаты возвращаются только при точном совпадении с векторами, созданными функцией ts_vector.

Затем я попытался выполнить поиск, используя триграммы, которые дали лучшие результаты, но когда я набираю название компании с названием какого-либо подразделения, я не получаю результаты, потому что созданные триграммы не в том же порядке, что и поисковый запрос.

Что я могу сделать, чтобы улучшить мой поиск по таблице?

1 Ответ

0 голосов
/ 05 января 2019

Почему бы не создать вспомогательную таблицу, подобную этой, и использовать простой выбор вместо полнотекстового поиска?

CREATE TABLE company_keywords (
  company VARCHAR PRIMARY KEY,
  keyword VARCHAR NOT NULL
);

SELECT DISTINCT company FROM company_keywords WHERE keyword LIKE 'XYZ%';
...