Java Lucene NRT поиск не работает - PullRequest
1 голос
/ 06 февраля 2012

Игра с Люсеном.Попытка сделать мои изменения видимыми для других тем чтения.Без перестройки индекса.Для этого я использую класс SearcherManager.

Создание менеджера

Directory index = new SimpleFSDirectory(new File(LUCENE_INDEX_PATH));
w = new IndexWriter(index, config);
indexReader = IndexReader.open(w, true);
manager = new SearcherManager(w, true, null, null);

Запрос на обновление

w.updateDocument(t, document);
manager.maybeReopen(); // openIfChanged same behavior
w.commit();

Запрос на поиск

IndexSearcher searcher = manager.acquire();
try {
    return performSearch(query, searcher, skip, limit);
} finally {
    manager.release(searcher);
    searcher = null;
}

ИзмененияЗаписан на диск, но новый поисковый запрос видит их только после перезапуска приложения (воссоздание индекса).Похоже, IndexSearcher все еще указывает на старый индекс.

Ответы [ 3 ]

4 голосов
/ 06 февраля 2012

Вам не нужно открывать свой собственный IndexReader; просто создайте SearcherManager (из вашего IndexWriter), а затем воспользуйтесь приобретением / выпуском из него, чтобы получить искатель / читатель.

После добавления / удаления документов с помощью средства записи вам следует вызвать MaybeReopen, а затем при следующем вызове SearcherManager.acquire возвращенный поисковик отразит изменения. Лучше использовать фоновый поток (т. Е. Не поток, выполняющий поиск), чтобы индексировать документы и вызывать MaybeReopen.

Вам не нужно вызывать IndexWriter.commit, чтобы сделать изменения видимыми - вызывайте его только тогда, когда вам требуется долговечность (т. Е. Чтобы все изменения были безопасны на диске и пережили сбой OS / JVM, потерю питания, уничтожение -9 и т. д.).

0 голосов
/ 06 февраля 2012

Похоже, я не должен создавать IndexReader.

indexReader = IndexReader.open(w, true)

Если удалить эту строку, все работает.Не знаю, почему еще

0 голосов
/ 06 февраля 2012

Если вы хотите использовать поиск NRT, используйте другой конструктор SearcherManager, который принимает IndexWriter в качестве параметра. Проверьте эту статью http://blog.mikemccandless.com/2011/11/near-real-time-readers-with-lucenes.html

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