Нечеткое сопоставление строк SQL.Массив или конкатенация? - PullRequest
0 голосов
/ 07 июня 2018

У меня есть значительный список мест, и у многих из них есть несколько названий.Я хочу реализовать их нечеткий поиск.

Лучше ли объединить все имена в одну строку или поместить их все в массив ?

Объединение

--table definition
CREATE TABLE places_concat(
  id serial,
  name varchar(200),
  all_names varchar(10000),
  ...
);
--sql query
select name from places where 'kugluktuk' % all_names;

Массив

--table definition
CREATE TABLE places_array(
  id serial,
  name varchar(200),
  all_names text[],
  ...
);
--sql query
select name from places where 'kugluktuk' % any(all_names);

(я использую postgres 10 с pg_trgm расширение так % нечеткие совпадения строк.

1 Ответ

0 голосов
/ 07 июня 2018

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

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

И я проверяю «сходство» этого уникального описания с заданной строкой поиска.Проблема с триграммой состоит в том, что строка, содержащая одни и те же слова несколько раз, имеет более низкий коэффициент сходства с тестовой строкой, чем описание, содержащее только отдельные слова ...

И, чтобы быть еще более точным, в конце я также провела предварительную обработку"поиск строки", чтобы удалить возможные повторяющиеся слова даже из нее ... Люди иногда вводят невероятные вещи ...: -)

...