Postgresql Точное совпадение с использованием полного текста ts_query - PullRequest
0 голосов
/ 04 октября 2019

Я хочу сопоставить все точные совпадения, включая:

- Exact match
- Plurals
- Mispelling

Данные таблицы:

  • натуральная люфа (ДА - точное совпадение)
  • натуральные люфы (ДА - точное совпадение с множественным числом)
  • натуральная люфа (ДА - точное совпадение с орфографической ошибкой)
  • естественная люфа (НЕТ)
  • вся естественная люфа (НЕТ - не точное совпадение)

Я пытался с этим, но он не работает

SELECT

    query

FROM reports
WHERE to_tsvector('english', query)  @@ websearch_to_tsquery('english', 'natural loofah') 
GROUP BY query

1 Ответ

1 голос
/ 04 октября 2019

Нет, это не сработает. Вы неправильно поняли, что делает полнотекстовый поиск: он ищет целые слова (необязательно: префиксы), игнорируя сгибание.

Полнотекстовый поиск делает не поиск сходства.

Возможно, вам лучше использовать индекс триграмм:

CREATE EXTENSION pg_trgm;

CREATE INDEX ON reports USING gin (query gin_trgm_ops);

SELECT query
FROM reports
WHERE query % 'natural loofah';

Здесь % - оператор подобия.

...