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

Я хочу создать полнотекстовый запрос выбора в базе данных postgres. Например, я хочу найти все книги с названием «Гарри Поттер». Если я просто найду Гарри с полнотекстовым поиском, он будет работать быстро. например,

SELECT * FROM books WHERE to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('harry' AS text))

Но если я попытаюсь объединить заголовок, такой как «Гарри Поттер», у моего запроса истечет время (например, одна минута)

SELECT * FROM books WHERE to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('harry' AS text)) AND to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('potter' AS text))

В чем моя ошибка? Мне нужен этот полный текст поиска, а также комбинация из 1 или более слов.

Если существует лучшее решение, чем объединение двух слов в одном запросе, например

 SELECT * FROM books WHERE to_tsvector('simple', cast(title AS text)) @@ plainto_tsquery('simple',cast('harry potter' AS text))

РЕДАКТИРОВАТЬ: Найдено что-то: Количество моего Гарри Поттера - около 110 000 данных (на самом деле, как 1 млн. данных в книгах). Если я посмотрю, например, на Ice Fire, в базе данных будет только 300 результатов, и мой запрос будет выполнен очень быстро. Может быть, проблема с возвращением набора результатов из базы данных? Я на самом деле использую лимит 100.

1 Ответ

1 голос
/ 14 января 2020

Вы должны использовать поиск фразы:

WHERE to_tsvector('simple', title) @@ to_tsquery('simple', 'harry <-> potter')
...