sql >> Database >  >> RDS >> PostgreSQL

Hoe voer ik een SQL-query uit naar woorden met interpunctie in Postgresql?

tsvector

Gebruik de tsvector type, dat deel uitmaakt van de PostgreSQL-tekstzoekfunctie.

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

Je kunt ook bekende operatoren op tsvectors gebruiken:

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'

Van tsvector-documentatie:

Als je ook taalspecifieke normalisatie wilt doen, zoals het verwijderen van veelvoorkomende woorden ('de', 'a', etc) en vermenigvuldigingen, gebruik dan de to_tsvector functie. Het kent ook gewichten toe aan verschillende woorden voor het zoeken naar tekst:

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)

Volledige tekst zoeken

Het is duidelijk dat het duur is om dit voor elke rij in een query te doen - dus u moet de tsvector in een aparte kolom opslaan en ts_query() gebruiken om ernaar te zoeken. Hiermee kunt u ook een GiST-index maken op de 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

Zoeken gebeurt met tsquery en de @@-operator:

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


  1. Zeer lange openingstijd van de SQL-verbinding

  2. org.hibernate.InstantiationException:Geen standaardconstructor voor entiteit::principal.Cliente

  3. Voorbeeld van PHP/MySQL-injectie

  4. Is het mogelijk om het .mylogin.cnf-bestand in c# te gebruiken om verbinding te maken?