Интеграция Lucene и сервлетов - PullRequest
0 голосов
/ 22 ноября 2011

Возможно, я создаю приложение Java-сервлета, которое необходимо интегрировать с очень простым индексом Lucene.Индекс будет доступен для поиска только по одному полю, и затем я хочу отправить результаты обратно, возможно, в виде XML, может быть, в формате JSON, но на данный момент это не имеет значения.Главное, что сам индекс не является проблемой.

Мой вопрос заключается в том, как эти два должны быть интегрированы.Я склонен к программному доступу к индексу из приложения сервлета, и поэтому я бы запустил его и сохранил в ServletContextListener.Затем я мог бы построить довольно простую консоль для включения и выключения службы поиска.У меня также может быть одно приложение, которое будет обрабатывать запросы, а также периодически перестраивать индекс, а затем заменять новое, заменяя старое.Одна потенциальная проблема, которая возникает, заключается в том, как заставить сервлет вести себя и немного подождать, если / когда индекс будет заменен.Это должно занять меньше секунды, и я мог бы сделать это в 2 часа ночи, но я все же хотел бы, чтобы это было как можно более пуленепробиваемым.Если сервлет отправляет запрос в службу и должен подождать, какой таймаут используется?Где / как мне это контролировать?

Другие возможности - запустить индекс как отдельное приложение Java или запустить его в отдельном приложении с сервлетами, и позволить первому приложению выполнять http-вызовы через сервлет.,Я не вижу большой пользы в последнем подходе, он просто добавляет больше кода, который на самом деле не служит какой-либо цели.Не было бы никаких оснований для прямого доступа к поисковым запросам по HTTP.

Что вы думаете?Я ценю любой вклад от кого-то опытного в этом направлении.

1 Ответ

1 голос
/ 24 ноября 2011

Следует иметь в виду, что рекомендуется иметь один IndexWriter. Мы пошли по пути сохранения его внутри сервлета, и проблема, с которой мы столкнулись, состоит в том, что с парой NLB у вас есть два сервлета, каждый из которых хочет написать. Это требует, чтобы вы либо заплатили огромные штрафы за исполнение, либо как-то назначили одного из них автором.

Если у вас более двух серверов, эта проблема, конечно, становится еще острее. Но если вы говорите обо всем, что выполняется внутри одного процесса, то, возможно, вам не о чем беспокоиться.

Я бы посоветовал вам пересмотреть Solr. В некотором смысле он имеет больший набор функций, поэтому я могу понять, почему вы чувствуете, что он «излишний», но обычно его быстрее настроить и проще использовать - это означает, что излишним является Lucene. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...