PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy operator wyszukiwania fraz <-> działa z dokumentami JSONB, czy tylko z tabelami relacyjnymi?

Funkcja wyszukiwania fraz jest zintegrowana z wyszukiwaniem tekstowym danych pisać tsquery . operator wyszukiwania tekstowego @@ wyświetlasz pobiera tsvector po lewej stronie i tsquery w prawo. I tsvector można zbudować z dowolnego typu znaków, a także z dokumentu JSON.

Powiązane:

Możesz przekonwertować swój json lub jsonb dokument do wektora wyszukiwania tekstu z jednym z dedykowany funkcje :

to_tsvector()
json(b)_to_tsvector()

Pamiętaj, że zawierają one tylko wartości z dokumentu JSON, a nie kluczy . Zazwyczaj tego właśnie chcesz.Przykład podstawowy:

SELECT to_tsvector(jsonb '{"foo":"jump quickly"}')
    @@ to_tsquery('jump <-> quick:*');

Demonstracja dopasowania prefiksu na szczycie wyszukiwania fraz, będąc na nim. Zobacz:

Alternatywnie , możesz po prostu utworzyć tsvector z text reprezentacja twojego dokumentu JSON z uwzględnieniem nazw kluczy:

SELECT to_tsvector((jsonb '{"foo-fighter":"jump quickly"}')::text)
    @@ to_tsquery('foo <-> fight:*');

Tworzy większy tsvector , oczywiście.

Oba mogą być indeksowane (co jest głównym punktem wyszukiwania tekstowego). Tylko indeksy są powiązane z tabelami relacyjnymi. (Możesz też indeksować wyrażenie !)
Samo wyrażenie może być zastosowane do dowolnej wartości, niezwiązanej z tabelami, jak to sugerujesz.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uwzględnić brakujące dane dla wielu grupowań w określonym przedziale czasu?

  2. Wypełnij wiele tabel z jednego obiektu JSON za pomocą json_populate_recordset

  3. Jak zwrócić wartość z funkcji, jeśli nie znaleziono żadnej wartości?

  4. Dlaczego PostgreSQL uważa, że ​​granice NULL w typach zakresów różnią się od granic nieskończonych?

  5. Indeks do znajdowania elementu w tablicy JSON