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

Podobne ciągi UTF-8 dla pola autouzupełniania

Nie używasz klasy operatora dostarczonej przez pg_trgm moduł. Utworzyłbym indeks taki:

CREATE INDEX label_Lower_unaccent_trgm_idx
ON test_trgm USING gist (lower(unaccent_text(label)) gist_trgm_ops);

Pierwotnie miałem tutaj indeks GIN, ale później dowiedziałem się, że GiST prawdopodobnie jeszcze lepiej nadaje się do tego rodzaju zapytań, ponieważ może zwracać wartości posortowane według podobieństwa. Więcej szczegółów:

  • Postgresql:dopasowywanie wzorców między dwiema kolumnami
  • Szybkie znajdowanie podobnych ciągów za pomocą PostgreSQL

Twoje zapytanie musi pasować do wyrażenia indeksu, aby móc z niego skorzystać.

SELECT label
FROM   the_table
WHERE  lower(unaccent_text(label)) % 'fil'
ORDER  BY similarity(label, 'fil') DESC -- it's ok to use original string here

Jednak „filbert” i „filé powder” nie są w rzeczywistości bardzo podobne do „fil” według operatora %. Podejrzewam, że naprawdę chcesz tego:

SELECT label
FROM   the_table
WHERE  lower(unaccent_text(label)) ~~ '%fil%'
ORDER  BY similarity(label, 'fil') DESC -- it's ok to use original string here

Spowoduje to wyszukanie wszystkich ciągów zawierających wyszukiwany ciąg i posortowanie najlepszych dopasowań zgodnie z % najpierw operator.

I soczysta część:wyrażenie może używać indeksu GIN lub GiST od PostgreSQL 9.1 ! Cytuję instrukcję dotyczącą modułu pg_trgm:

Począwszy od PostgreSQL 9.1, te typy indeksów obsługują również wyszukiwanie indeksów dla LIKE i ILIKE, na przykład

Jeśli rzeczywiście chciałeś użyć % operator:

Czy próbowałeś obniżyć próg? dla operatora podobieństwa % z set_limit() :

SELECT set_limit(0.1);

czy nawet niższy? Wartość domyślna to 0,3. Tylko po to, żeby sprawdzić, czy jest to próg, który filtruje dodatkowe dopasowania.



  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 zezwolić na zdalny dostęp do bazy danych PostgreSQL

  2. Konfiguracje wielu centrów danych z PostgreSQL

  3. Jak UNION działa w PostgreSQL

  4. Klucze podstawowe z Apache Spark

  5. Jak Tan() działa w PostgreSQL