Търсене в пълен текст (FTS)
Можете да използвате plainto_tsquery()
до (по документация
) ...
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Използвайте го като:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Но това все още е доста строго и предоставя само много ограничена толерантност към сходството.
Подобие на триграма
Може да е по-подходящо за търсене на сходство , дори да преодолее до известна степен правописните грешки.
Инсталирайте допълнителния модул pg_trgm
, създайте GiST индекс и използвайте оператора за подобие %
в търсене на най-близък съсед :
По принцип с триграма GiST индекс на sentence
:
-- SELECT set_limit(0.3); -- adjust tolerance if needed
SELECT *
FROM tbl
WHERE sentence % 'My new sentence'
ORDER BY sentence <-> 'My new sentence'
LIMIT 10;
Още:
- Бързо намиране на подобни низове с PostgreSQL
- Намиране на подобни публикации с PostgreSQL
- Бавно търсене в пълен текст за термини с висока честота
Комбинирайте и двете
Можете дори да комбинирате сходство на FTS и триграма: