Я хочу создать полнотекстовый запрос выбора в базе данных 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.