Я ищу в использовании Lucene и/или Solr для обеспечения поиска в веб-приложении с питанием от РСУБД. К сожалению, для меня вся документация, которую я просматривал, касается того, как получить данные из индекса; Я больше беспокоюсь о том, как создать полезный индекс. Есть ли «лучшие практики» для этого?Есть ли набор лучших практик для создания индекса Lucene из реляционной БД?
ответ
Мы выкатываем наше первое приложение, которое использует Solr сегодня вечером. С помощью Solr 1.3 они включили DataImportHandler, который позволяет вам указывать ваши таблицы базы данных (они называют их сущностями) вместе со своими отношениями. После определения простой HTTP-запрос будет тигрировать импорт ваших данных.
Подробнее см. the Solr wiki page for DataImportHandler.
Как введение:
Brian McCallister написал хороший пост в блоге: Using Lucene with OJB.
Будет ли множество приложений записываться в базу данных? Если это так, это немного сложно. у вас должен быть какой-то механизм для идентификации новых записей для подачи индексатора Lucene.
Еще один момент, который следует учитывать, - это вы хотите, чтобы один индекс охватывал все ваши таблицы или один индекс на таблицу. В общем, я рекомендую один индекс с полем в этом индексе, чтобы указать, из какой таблицы взялась запись.
Hibernate имеет поддержку полнотекстового поиска, если вы хотите искать постоянные объекты, а не неструктурированные документы.
Существует проект OpenSymphony под названием Compass, о котором вы должны знать. Я остался от него сам, в первую очередь потому, что кажется способом сложнее, чем искать. Кроме того, как я могу судить по документации (признаюсь, я не нашел времени, необходимого для ее прочтения), он хранит сегменты Lucene в виде блоков в базе данных. Если вы знакомы с архитектурой Lucene, Compass реализует Lucene Directory поверх базы данных. Я думаю, что это неправильный подход. Я бы использовал встроенную поддержку базы данных для индексирования и внедрения Lucene IndexReader. Такая же критика относится к реализациям распределенных кешей и т. Д.