Для каждого поискового запроса я создаю строку tsquery запроса. Например, для строки «крокодил Гена», у меня формируется запрос «крокодил:* & Гена:*» и всё как бы хорошо. Но проблема в том, как осуществлять поиск по строкам «гена & друзья», если у меня амперсанд пересекается с ним же в самом запросе, получая: «Гена:* & &:* & друзья:*». Как осуществлять поиск в таком случае? Удалять все спец. символы из искомой строки? Но что если они важны в контексте запроса?
экранировать?
Во-первых — ну да, или писать свой парзер (на сях, плюс он только один встроенный — и особо примеров переписывания нет) — или преобразовывать строку https://www.postgresql.org/docs/16/textsearch-parsers.html Во-вторых — дажэ если преобразовать & в and — то сам and выкинется по списку "stopwords". https://www.postgresql.org/docs/16/textsearch-dictionaries.html#TEXTSEARCH-STOPWORDS Тут ужэ или писать свой словарь (впрочем, словарей написано реально много, можэт можно какой готовый взять) или опять преобразовывать строку... Хотя, учитывая, что в позицыях слово and учитывается — можно тут в to_tsquery это пропустить, просто что-то вроде ген <2> друз В общем, попробуйте сами to_tsvector(...) , можэт и найдёте что подходящее.
Обсуждают сегодня