2013-08-08 2 views
2

У меня есть запрос, какTsquery возвращает точное соответствие ключевых слов

выберите * из туЬаЫх где posttext @@ to_tsquery ('Intelence');

Я просто хочу вернуть результаты с точным соответствием ключевому слову «Intelence», а не «intel», как я могу это сделать в postgresql?

Спасибо.

+0

Почему не 'posttext, как '% Intelence%''? Или регулярное выражение, если вам нужно что-то более сложное. –

ответ

4

Это невозможно с полнотекстовым поиском, если вы не хотите указывать PostgreSQL не на stemIntelence вообще, заменив текстовый поиск. Pg не включает слово в индексе, только стебли:

regress=> SELECT to_tsvector('english', 'Intelence'); 
to_tsvector 
------------- 
'intel':1 
(1 row) 

Вы можете подавить вытекающие полностью с simple словаря:

regress=> SELECT to_tsvector('simple','Intelence'); 
    to_tsvector 
--------------- 
'intelence':1 
(1 row) 

но это должно быть сделано по индексу, вы можете 't делать это для каждого запроса, не говоря уже о каждом поисковом термине. Таким образом, текст cats are bothering me не соответствует поиску cat в словаре simple из-за множественного числа, или bother, потому что неустановленные слова не совпадают.

Если вы хотите сделать индивидуальные исключения, вы можете редактировать словарь english, используемый tsearch2, и определить пользовательский словарь с требуемыми изменениями, а затем использовать этот словарь вместо english в запросах, где вы хотите получить исключения. Опять же, вы должны использовать тот же словарь для создания индекса и запросов.

Это может быть связано с необходимостью использования нескольких полнотекстовых индексов, что очень нежелательно с точки зрения замедления обновлений/вставок/удалений и с точки зрения эффективности использования памяти.

+0

Спасибо за ваше объяснение. Поэтому, возможно, я должен использовать подход с двумя шагами: 1. выберите в таблицу использование @@ to_tsquery («Intelence»); 2.Используйте запрос «select like», чтобы найти точную фразу «Intelence» из таблицы 1? – Seen

+0

@Seen Да, это был бы разумный вариант. Или даже используйте '~ * '\ mintelence \ M', чтобы соответствовать дискретному слову только в словарных буферах. –

Смежные вопросы