PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Операторът за търсене по фраза <-> работи ли с JSONB документи или само с релационни таблици?

Възможността за търсене по фраза е интегрирана в данни за текстово търсене тип 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 , очевидно.

И двете могат да бъдат индексирани (което е основната точка на търсенето на текст). Само индексите са обвързани с релационни таблици. (И можете да индексирате израза !)
Самият израз може да се приложи към всяка стойност, без да е обвързан с таблици, както изглежда предполагате.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Умножаване на две колони, които са били изчислени на оператор CASE

  2. доктрина JSON колона в postgresql съхранява обекти или масиви от едни и същи данни

  3. Прехвърляне на данни от Kafka тема към PostgreSQL в JSON

  4. Намерете всички таблици на дялове, наследени от главната таблица

  5. Плъзгаща се средна въз основа на времеви печати в PostgreSQL