Как часто я должен разогревать свой индекс Lucene?

Мне было интересно, была ли у кого-то еще такая же ситуация с Lucene (не Solr)?

Когда я открываю индекс Lucene, я подогреваю его типичным запросом, а затем сохраняю поисковик в кэше в течение некоторого периода времени, чтобы его могли использовать многие запросы. Затем я снова открываю его и повторяю. Поскольку я запускаю Lucene 3.6 в Linux, насколько я понимаю, большая часть данных моего открытого индекса находится в кеше файловой системы, а не в куче JVM. Я обнаружил, что время ответа на запросы увеличивается с течением времени - если только я не продолжаю разогревать поисковик путем повторного выполнения моего типичного запроса. У кого-нибудь еще была эта проблема? Если да, то является ли повторное прогревание единственным способом, позволяющим отвечать на запросы? Как часто работает лучше всего?

Некоторый фон

  • машина всегда очень занята обработкой файлов, не относящихся к Lucene, и я подозреваю, что со временем страницы кэша F/S заменяются
  • мой индексатор не работает в той же JVM, что и сервер запросов, поэтому NRT и т. д. не имеет значения

Спасибо!

Крис

2 ответа

Я думаю, что эта проблема не связана с самой lucene, я думаю, что это проблемы ОС, поскольку вы знаете, что lucene использует библиотеки ввода-вывода java, которые используют собственные методы ввода-вывода операционной системы.

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

Но мне действительно интересно, почему я хочу держать вашего читателя на некоторое время, и я пытаюсь сказать, что если поисковые запросы приходят от пользователей, процент повторения одного и того же запроса очень слабый, что также создает новый IndexSearcher объект не та стоимость.

поэтому мои предложения для вас, чтобы создать IndexSearcher для каждого запроса (избавьтесь от ресурсов, как только вы закончите работу). если ваше экономическое обоснование может работать с этим.

Какой каталог вы используете?

Вы можете попробовать поиграть с swappiness как объяснено http://wiki.apache.org/lucene-java/ImproveSearchingSpeed.

Другой вариант будет использовать mlockall как описано в http://jprante.github.io/applications/2012/07/26/Mmap-with-Lucene.html.

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