PostgreSQL точное совпадение с полнотекстовым поиском - PullRequest
0 голосов
/ 14 апреля 2020

Как мне искать строки, соответствующие поисковой фразе? Если поисковый запрос смешная собака

Мне нужно получить результат, где поле поиска содержит ТОЛЬКО эти 2 слова "смешной" и "собака" в любом порядке, в любая форма слова (собаки, смешнее, смешнее ...) и пропущенные предлоги и артикли (a, the, и, of ...)

1 Ответ

1 голос
/ 14 апреля 2020

Принимая во внимание тот факт, что англ sh, используемый PostgreSQL, не использует сравнительные и превосходные степени (я должен думать, что это сделано по замыслу, а не просто по ошибке), в PostgreSQL нет разумного способа сделать это. из коробки.

select to_tsvector('english','funny funnier funniest big bigger biggest');
                            to_tsvector                            
-------------------------------------------------------------------
 'big':4 'bigger':5 'biggest':6 'funni':1 'funnier':2 'funniest':3

Но если вы установите словарь english_hunspell (сам по себе не тривиальный), вы сможете приблизиться к тому, что вы хотите, по крайней мере, для одного примера, который вы даете .

create text search configuration english_hun (copy = english);
ALTER TEXT SEARCH CONFIGURATION english_hun alter mapping replace english_stem with english_hunspell;
select to_tsvector('english_hun','funny funnier funniest big bigger biggest');
                 to_tsvector                  
----------------------------------------------
 'big':4 'bigger':5 'biggest':6 'funny':1,2,3

Наиболее распространенные предлоги - это уже стоп-слова, но не все из них, поэтому вам может понадобиться настроить список стоп-слов.

После выполнения обычного соответствия (@@ ) Вы могли бы добавить условие AND, убедившись, что длина tsvector и tsquery одинакова. Это будет соответствовать «смешная собака смешно», что мне не ясно, хотите вы или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...