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