Lucene возле поиска в реальном времени

Я хотел бы повысить скорость своей поисковой системы, используя некоторые функции, такие как "Поиск в реальном времени", что ускоряет открытие индекса.

Кто может сказать мне, в чем различия и преимущества использования одного или другого из следующих фрагментов кода:

IndexReader newIndexReader = IndexReader.openIfChanged(oldReader);

а также

IndexWriter writer; // create an IndexWriter here
...
IndexReader reader = writer.getReader();

Обратите внимание, что в первом случае мне не нужно, чтобы indexWriter находился в том же процессе, что и IndexReader.

1 ответ

Решение

Прежде всего, writer.getReader() доступно только в версии 3.6, но отсутствует во всех версиях v4 (4.0, 4.1, ...). Таким образом, вы не должны использовать его, если вы заботитесь о ремонтопригодности.

Теперь, чтобы ответить на ваш вопрос. writer.getReader() сбрасывает все ожидающие записи и безоговорочно открывает нового читателя (плюс есть некоторые другие ограничения - см. метод javadoc). IndexReader.openIfChanged(oldReader) открывает только новый читатель, если были внесены какие-либо изменения, в противном случае возвращает старый читатель.

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

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

Другие вопросы по тегам