Сложный полнотекстовый поиск с использованием PlayFramework Search / поиска в режиме гибернации

#hibernate #lucene #playframework #hibernate-search

#переход в режим гибернации #lucene #playframework #переход в режим гибернации-поиск

Вопрос:

Предположим, существует только два типа объектов модели.

Отметьте статью

Статья может содержать переменное количество тегов, а также большое текстовое поле, содержащее основную часть статьи.

Как мне выполнить эффективный полнотекстовый поиск статей, соответствующих определенному мной набору тегов? Например, каков наилучший способ эффективного запроса (с поддержкой подсчета и разбивки на страницы) из 1 миллиона статей, которые 1) соответствуют тексту: бизнес * и 2) имеют теги «Америка», «Экономика» и НЕ помечены тегом «Азия»?

Я могу эффективно выполнять 1) (используя HQL или обычный старый SQL) и 2) (используя lucene query) по отдельности, но не оба из них вместе. У кого-нибудь есть идеи?

Комментарии:

1. Я не уверен, что понимаю, что вы подразумеваете под «обоими вместе»… Поиск в базе данных SQL и запрос lucene — это два разных механизма, использующих разные данные индексации, поэтому они работают по-разному и возвращают разные результаты. Что вы имеете в виду, используя их вместе?

2. Как и в, я хочу фильтровать статьи, которые помечены как Америка (что необходимо сделать в базе данных), так и статьи, которые содержат мировой «бизнес» (что следует сделать в поисковой системе). Я мог бы отдельно находить статьи, используя каждый метод, а затем использовать пересечение результатов, но это кажется действительно неэффективным подходом. Используя их вместе, я имел в виду, есть ли какой-то способ реализовать это более эффективно, чем пересечение результатов.

3. Да, реализовать пересечение не совсем просто, и оно не учитывает уместность обоих наборов результатов. Если есть способ объединить оба, я не знаю :)… Единственный известный мне способ — хранить всю поисковую информацию в одном механизме индексирования, и я ничего не имею против индексации некоторых данных БД, например, с помощью lucene, поскольку он был создан для этого. Таким образом, вы могли бы искать все, используя lucene (или другой движок, такой как elastic search)

Ответ №1:

Вы смотрели на модуль эластичного поиска? Это очень мощный модуль, и владелец модуля проделал большую работу, документируя свою работу.