sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL Full Text Search a Trigram Confusion

Slouží k velmi odlišným účelům.

  • Fulltextové vyhledávání se používá k vrácení dokumentů, které odpovídají vyhledávacímu dotazu s odvozenými slovy.
  • Trigramy vám poskytují metodu pro porovnání dvou řetězců a určení, jak podobné vypadají.

Zvažte následující příklady:

SELECT 'cat' % 'cats'; --true

Výše uvedené vrátí hodnotu true, protože 'cat' je docela podobný 'cats' (jak je dáno limitem pg_trgm).

SELECT 'there is a cat with a dog' % 'cats'; --false

Výše uvedené vrátí false protože % hledá podobně mezi dvěma celými řetězci, nehledá slovo cats v rámci řetězec.

SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true

To vrátí true protože tsvector transformoval řetězec na seznam odvozených slov a ignoroval spoustu běžných slov (stop slova – jako „je“ a „a“)... pak hledal odvozenou verzi cats .

Vypadá to, že chcete použít trigramy k automatickým opravám váš ts_query ale to ve skutečnosti není možné (stejně ne žádným efektivním způsobem). Ve skutečnosti to nevědí slovo je špatně napsané, jak moc podobné jinému slovu může být. Mohli lze použít k prohledávání tabulky slov, abyste se pokusili najít podobná slova, což vám umožní implementovat funkci typu „měl jste na mysli...“, ale toto slovo vyžaduje udržování samostatné tabulky obsahující všechna slova použitá při hledání search pole.

Pokud máte některá běžně chybně napsaná slova/fráze, se kterými chcete, aby se textový rejstřík shodoval, možná se budete chtít podívat na slovníky synonym




  1. Jak vypočítat medián v MySQL

  2. MariaDB RTRIM() vs RTRIM_ORACLE():Jaký je rozdíl?

  3. Rozdíly mezi databázemi SQL a NoSQL – srovnání MySQL a MongoDB

  4. Jak přidat název do záhlaví formuláře v aplikaci Access