#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:
Вы смотрели на модуль эластичного поиска? Это очень мощный модуль, и владелец модуля проделал большую работу, документируя свою работу.