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

Подобни UTF-8 низове за поле за автоматично довършване

Не използвате операторския клас, предоставен от pg_trgm модул. Бих създал индекс като този:

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

Първоначално имах GIN индекс тук, но по-късно научих, че GiST вероятно е дори по-подходящ за този вид заявка, защото може да връща стойности, сортирани по сходство. Повече подробности:

  • Postgresql:Съвпадение на модели между две колони
  • Бързо намиране на подобни низове с PostgreSQL

Вашата заявка трябва да съответства на индексния израз, за ​​да можете да го използвате.

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

Въпреки това, "filbert" и "filé prah" всъщност не са много подобни на "fil" според % оператора. Подозирам, че това, което наистина искате, е това:

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

Това ще намери всички низове, съдържащи низа за търсене, и ще сортира най-добрите съвпадения според % първо оператор.

И сочната част:изразът може да използва GIN или GiST индекс от PostgreSQL 9.1 ! Цитирам ръководството на pg_trgm moule:

Започвайки от PostgreSQL 9.1, тези типове индекси също поддържат търсене в индекси за LIKE и ILIKE, например

Ако всъщност сте имали предвид да използвате % оператор:

Пробвали ли сте даснижите прагата за оператора за сходство % с set_limit() :

SELECT set_limit(0.1);

или дори по-ниско? По подразбиране е 0.3. Само за да видите дали това е прагът, който филтрира допълнителни съвпадения.



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

  2. Открийте дали редът е актуализиран или вмъкнат

  3. org.postgresql.util.PSQLException:Големите обекти не може да се използват в режим на автоматично записване

  4. Какъв тип JOIN да използвате

  5. Събирайте рекурсивни JSON ключове в Postgres