Задать вопрос

Как правильно пользоваться функцией to_tsquery в Postgres?

Здравствуйте. настроил полнотекстовый поиск, в нужной таблице создал поле fts tsvector, в него попадают слова, все вроде бы корректно.
например если в тексте встречается слово "документы", то в fts попадет слово "документ"

потом ищу это слово так:
SELECT *
FROM table
WHERE fts @@ to_tsquery('документ')

находит нужную запись.

если ищу вот так:
SELECT *
FROM table
WHERE fts @@ to_tsquery('документ<b>Ы</b>')

ничего не находит. to_tsquery('документы') не преобразуется в "документ", хотя to_tsquery('documents') преобразуется в document...
Подскажите в чем проблема?

скажу сразу, что русский словарь подключен, слово документ там есть, слова документы нет, и я так понимаю не должно

UPD:
select ts_lexize('ispell_ru', 'документы') выдает "документ",
select to_tsquery('russian', 'документы') тоже. есть ли способ определить автоматически какой словарь использовать, русский или английский?
  • Вопрос задан
  • 1048 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Insolita
@Insolita
Отчаянная домохозяйка
select plainto_tsquery('документ<b>Ы</b>');
select plainto_tsquery('ru', 'документЫ');  //Вместо 'ru' - название конфигурации, которое указываете в to_tsvector при создании индекса


А функция которая добавляет вектор как у вас выглядит? при использовании to_tsvector какой язык указан?
create function fts_name_vector_upd() returns trigger
LANGUAGE plpgsql
AS $$
BEGIN
	NEW.fts=setweight( coalesce( to_tsvector('russian', NEW.name),''),'A') || ' ' ||
	        setweight( coalesce( to_tsvector('russian', NEW.description),''),'B') || ' ';
	RETURN NEW;
END;
$$;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы