2012-04-28 2 views
1

Я создаю веб-приложение с бэкэндом, поддерживающим веб-сервис.Основанный на Apache Lucene DAO?

Одна из моих таблиц в значительной степени автономна, т.е. строки, ссылающиеся только на одну таблицу, в которой я могу жить без объединения и получать только первичный ключ, когда мне это нужно. Однако эта таблица содержит много строк, и поиски, выполненные против нее, кричат ​​«Lucene». MySQL не может обрабатывать эти запросы с разумным временем отклика.

Поэтому я хотел бы использовать Lucene для поиска этой таблицы. В прошлом я использовал Solr широко, поэтому я знаком с концепциями и терминологией. Я думал, что, учитывая мои обстоятельства, описанные выше, вместо синхронизации индекса SQL-to-Lucene, я не вижу причины, по которой я не должен просто использовать Lucene как каноническое хранилище для этого конкретного объекта. В принципе, я хотел бы иметь реализацию «Lucene DAO», которая заменяет текущую реализацию DAB Hibernate для этой конкретной таблицы.

Так что мои вопросы:

  1. Есть ли причина, почему следует избегать, что и придерживаться SQL-к-индекса синхронизации?
  2. Если «Lucene DAO» является жизнеспособным подходом, существуют ли там библиотеки, которые обеспечивают основу для чего-то подобного? Я пытался искать, но не мог найти.
  3. Я столкнулся с Hibernate Search Он делает только половину того, что я ищу, но я могу попробовать и использовать его только для поиска. У кого-нибудь есть опыт использования Hibernate Search?

Edit: Я теперь попадались Compass который на быстрый взгляд, кажется, что я ищу. У кого-нибудь есть опыт?


Edit # 2: Compass была прекращена и заменена ElasticSearch, которая не совсем то же самое (услуга, а не компонент). Hibernate Search не оказался тем, что я ищу. Суть в том, что это действительный подход, но на данный момент нужно реализовать такой DAO.

ответ

2

Я бы выбрал SQL для этого прецедента и использовал Lucene straight, no chaser.

Ваши запросы с Lucene будут намного богаче: n-граммы вместо LIKE.

Смежные вопросы