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

Jak mohu dotazovat SQL na slova s ​​interpunkcí v Postgresql?

tsvector

Použijte tsvector typ, který je součástí funkce textového vyhledávání PostgreSQL.

postgres> select 'What are Q-type Operations?'::tsvector;
              tsvector               
-------------------------------------
 'Operations?' 'Q-type' 'What' 'are'
(1 row)

Známé operátory můžete použít i na tsvectors:

postgres> select 'What are Q-type Operations?'::tsvector
postgres>        || 'A.B.C''s of Coding'::tsvector;
                           ?column?                           
--------------------------------------------------------------
 'A.B.C''s' 'Coding' 'Operations?' 'Q-type' 'What' 'are' 'of'

Z dokumentace tsvector:

Chcete-li také provést normalizaci specifickou pro jazyk, například odstranit běžná slova ('the', 'a' atd.) a násobky, použijte to_tsvector funkce. Také přiřazuje váhu různým slovům pro textové vyhledávání:

postgres> select to_tsvector('english',
postgres> 'What are Q-type Operations? A.B.C''s of Coding');
                      to_tsvector                       
--------------------------------------------------------
 'a.b.c':7 'code':10 'oper':6 'q':4 'q-type':3 'type':5
(1 row)

Kompletní textové vyhledávání

Je zřejmé, že to pro každý řádek v dotazu bude drahé – takže byste měli uložit tsvector do samostatného sloupce a použít ts_query() k jeho vyhledání. To vám také umožňuje vytvořit index GiST na tsvector.

postgres> insert into text (phrase, tsvec)
postgres>   values('What are Q-type Operations?',
postgres>   to_tsvector('english', 'What are Q-type Operations?'));
INSERT 0 1

Vyhledávání se provádí pomocí tsquery a operátoru @@:

postgres> select phrase from text where tsvec @@ to_tsquery('q-type');
           phrase            
-----------------------------
 What are Q-type Operations?
(1 row)


  1. Otázka MySQL – Unikátní klíč Nefunguje správně, nebo tomu nerozumím?

  2. Wordpress vlastní databázová tabulka nebyla rozpoznána

  3. Časová náročnost třídění databáze

  4. Co to znamená, když řeknu, že Připravený výpis je předkompilován?