tvector
Използвайте tsvector
тип, който е част от функцията за търсене на текст на PostgreSQL.
postgres> select 'What are Q-type Operations?'::tsvector;
tsvector
-------------------------------------
'Operations?' 'Q-type' 'What' 'are'
(1 row)
Можете също така да използвате познати оператори на 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'
От документацията на tsvector:
Ако също така искате да направите нормализация за специфичен език, като премахване на общи думи („the“, „a“ и т.н.) и умножения, използвайте to_tsvector
функция. Той също така присвоява тежести на различни думи за търсене на текст:
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)
Пълноценно текстово търсене
Очевидно правенето на това за всеки ред в заявка ще бъде скъпо -- така че трябва да съхранявате tsvector в отделна колона и да използвате ts_query(), за да го търсите. Това също ви позволява да създадете GiST индекс на 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
Търсенето се извършва с помощта на tsquery и оператора @@:
postgres> select phrase from text where tsvec @@ to_tsquery('q-type');
phrase
-----------------------------
What are Q-type Operations?
(1 row)