sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan forespørger jeg efter ord med tegnsætning i Postgresql?

tsector

Brug tsvector type, som er en del af PostgreSQL-tekstsøgningsfunktionen.

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

Du kan også bruge velkendte operatorer på 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'

Fra tsvector-dokumentation:

Hvis du også vil lave sprogspecifik normalisering, som at fjerne almindelige ord ('den', 'a' osv.) og multiplicere, skal du bruge to_tsvector fungere. Den tildeler også vægte til forskellige ord til tekstsøgning:

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)

Fuldstændig tekstsøgning

Det vil naturligvis være dyrt at gøre dette for hver række i en forespørgsel -- så du bør gemme tsvectoren i en separat kolonne og bruge ts_query() til at søge efter den. Dette giver dig også mulighed for at oprette et GiST-indeks på 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

Søgning udføres ved hjælp af tsquery og @@ operatoren:

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


  1. PostgreSQL, SQL-tilstand:42601

  2. Golang ORDER BY problem med MySql

  3. Begrænsning defineret UDSKYLDIG Umiddelbart er stadig UDSAT?

  4. Hvordan henter man data fra MySQL-databasen i JavaScript for at bygge et diagram?