PostgreSQL - Сравнить поля ts_vector - PullRequest
0 голосов
/ 02 марта 2020

У меня есть две таблицы, в которых у меня есть данные из двух разных источников. Одно из полей каждой таблицы содержит заголовок mov ie, но по какой-то причине вне моего контроля заголовки не всегда совпадают.

Поэтому я использую ts_vector, чтобы получить избавиться от всех незначительных различий (стоп-слов, множественного числа и т. д.).

См. пример здесь: http://sqlfiddle.com/#! 17 / 5ccbc / 3

Моя проблема это как сравнить два ts_vector без учета числовых значений c, а только с текстовым содержимым. Если я сравниваю непосредственно два поля, я получаю только точное соответствие между значениями, включая положение каждого слова. Единственное решение, которое я нашел, - это использование функции strip(), которая удаляет позиции и веса из tsvector, оставляя только текстовое содержимое.

Мне было интересно, есть ли самый быстрый способ сравнения ts_vectors.

1 Ответ

0 голосов
/ 02 марта 2020

Вы можете создать в индексе на раздетом векторе:

create index on tbl1 (strip(ts_title));
create index on tbl2 (strip(ts_title));

Но, учитывая, что ваш запрос должен извлекать каждую строку каждой таблицы, маловероятно, что это послужит значительным результатам. Выполнение объединения слиянием между предварительно вычисленными раздельными векторами может быть быстрее, но, вероятно, не после того, как вы включите издержки на создание и обслуживание индексов. Если реальное предложение WHERE является более строгим (выбирая только несколько строк из одной или другой таблицы), пожалуйста, поделитесь реальным запросом.

...