Възможността за търсене по фраза е интегрирана в данни за текстово търсене тип tsquery
. операторът за търсене на текст @@
показването ви отнема tsvector
вляво и tsquery
надясно. И tsvector
може да се изгради от всеки тип знаци, както и от JSON документ.
Свързани:
Можете да конвертирате своя json
или jsonb
документ към вектор за търсене на текст с един от специален функции
:
to_tsvector()
json(b)_to_tsvector()
Имайте предвид, че те включват само стойности от JSON документа, а не ключове . Обикновено това е, което искате. Основен пример:
SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
@@ to_tsquery('jump <-> quick:*');
Демонстриране на съвпадение на префикс върху търсенето по фраза, докато сте в него. Вижте:
Алтернативно , можете просто да създадете tsvector
от text
представяне на вашия JSON документ, за да включва и имена на ключове:
SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
@@ to_tsquery('foo <-> fight:*');
Създава по-голям tsvector
, очевидно.
И двете могат да бъдат индексирани (което е основната точка на търсенето на текст). Само индексите са обвързани с релационни таблици. (И можете да индексирате израза
!)
Самият израз може да се приложи към всяка стойност, без да е обвързан с таблици, както изглежда предполагате.