Результаты не сильно радуют. Есть таблица buildings, в котором есть колонка с полным адрессом здания.
Создал индекс: CREATE INDEX IF NOT EXISTS idx_buildings_address_string_gin ON buildings USING gin (
to_tsvector('russian', address_string)
);
SELECT *
FROM buildings
WHERE to_tsvector('russian', address_string) @@ plainto_tsquery('russian', 'Лермонтова, 2');
Получаю 0 результатов.
Делаю такой же запрос, только через ilike:
SELECT *
FROM buildings
where address_string ilike '%Лермонтова, 2%';
Получаю 40 результатов.
Вот примеры адресов: "Кемеровская область - Кузбасс обл, г Новокузнецк, р-н Куйбышевский, ул Лермонтова, 26"
"Хакасия Респ, г Абакан, ул Лермонтова, 21"
"Хакасия Респ, г Абакан, ул Лермонтова, 27"
"Хакасия Респ, г Абакан, ул Лермонтова, 29"
"Хакасия Респ, г Абакан, ул Лермонтова, 20"
"Хакасия Респ, г Абакан, ул Лермонтова, 25"
"Иркутская обл, г Иркутск, ул Лермонтова, 297б"
Вопрос такой: Как можно сделать полнотекстового поиска, чтобы он находил адреса, когда им на вход подаются не полные адреса?
Вам стоит разбираться / тестировать по шагам (какие получаются tsvector и tsquery, например). См. также: https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES Ну и да, почему бы не спросить в https://t.me/pgsql ?
Обсуждают сегодня