sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur gör jag en SQL-fråga efter ord med skiljetecken i Postgresql?

tsector

Använd tsvector typ, som är en del av PostgreSQL-textsökningsfunktionen.

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

Du kan också använda bekanta 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'

Från tsvector-dokumentation:

Om du också vill göra språkspecifik normalisering, som att ta bort vanliga ord ('the', 'a', etc) och multiplicera, använd to_tsvector fungera. Den tilldelar också vikter till olika ord för textsökning:

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)

Fullständig textsökning

Uppenbarligen kommer det att bli dyrt att göra detta för varje rad i en fråga -- så du bör lagra tsvektorn i en separat kolumn och använda ts_query() för att söka efter den. Detta låter dig också skapa ett GiST-index 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ökning görs med tsquery och @@-operatorn:

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


  1. json_encode med mysql-innehåll och omljud i utf-8

  2. Köra SQL-filer skript från ett Java-program

  3. Hur tar man bort nya radtecken från datarader i mysql?

  4. Skillnad mellan att använda REFERENSER med och utan UTLÄNDSK NYCKEL?