2014-01-20 5 views
0

Я разрабатываю веб-приложение на Java (используя Spring), которое использует базу данных SQL Server. Я использую Apache Lucene для реализации функции поиска для своего веб-приложения. С Apache Lucene перед выполнением поиска я создаю индекс заголовков. Я делаю это, сначала получив список всех названий из базы данных. Затем я просматриваю список названий и добавляю каждый из них в индекс. Это происходит каждый раз, когда пользователь что-то ищет.Apache Lucene - Оптимизация поиска

Я хотел бы знать, есть ли лучший, более эффективный способ создания индекса? Я знаю, что мой способ очень неэффективен и займет много времени, когда список названий очень длинный.

Любые предложения будут высоко оценены.

Благодаря

+0

Почему вы создаете новый индекс каждый раз, вместо того чтобы его хранить? Вы можете обновлять его время от времени. – aalku

ответ

0

Перед тем, как оптимизировать Lucene: SQL Server уже имеет full-text search функцию. Если это покрывает ваш прецедент, используйте его. Это самый простой способ, поскольку SQL Server позаботится о том, чтобы синхронизировать индекс поиска с базой данных.

Если полнотекстовый поиск SQL Server не подходит вашему прецеденту, ваше приложение должно создать свой собственный индекс поиска и синхронизировать его с базой данных. Для этого вам необходимо:

  • создать/обновить индекс поиска при запуске приложения
  • обновления индекса поискового когда вставки приложения, обновление или удаления титульного

Lucene гибко, где его сохраняет индекс поиска. Вы можете сохранить его в каталоге в вашей файловой системе или в базе данных (или написать собственный поставщик хранилища). Я рекомендую хранить его в файловой системе, так как производительность намного лучше, чем при хранении в базе данных.

Если у вас слишком много заголовков для индексации, вы также можете использовать индекс поиска в памяти, который вы воссоздаете каждый раз, когда запускается ваше приложение.

+0

Я думаю, что я собираюсь придерживаться Lucene и использовать предоставленное вами решение. Спасибо – COBOL

+0

Я вроде нуб с Lucene, так что вы можете предложить учебник для сохранения индекса в файловой системе, а затем загрузить его? – COBOL

+0

[Lucene за 5 минут] (http://www.lucenetutorial.com/lucene-in-5-minutes.html) является хорошей отправной точкой. Просто замените 'RAMDirectory' на' FSDirectory' в учебнике, и Lucene сохранит индекс в файле. – Acanda

0

Вы должны:

  1. сделать индекс Lucene, прежде чем запустить приложение
  2. индекс обновления, когда вы добавить/удалить заголовок/обновления в базе данных

Преимущества этого подход:

  1. Один полный индекс, если приложение отсутствует
  2. инкрементного индексирования, каждый раз, когда соответствующая информация изменяется
+0

Спасибо, это кажется достаточно простым для меня, чтобы понять и реализовать. – COBOL

+0

Но вы приняли другой ответ :-D – user987339

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