Оптимизация производительности Lucene - PullRequest
24 голосов
/ 21 марта 2009

Каковы различные способы оптимизации производительности Lucene?

Должен ли я использовать API-интерфейс кэширования для хранения своего поискового запроса lucene, чтобы сэкономить на накладных расходах при повторном построении запроса?

Ответы [ 6 ]

12 голосов
/ 21 марта 2009

Советы:

  • Сохраняйте размер индекса маленьким. Устранить нормы, термин векторов, когда они не нужны. Установите флажок Store для поля, только если это необходимо.
  • Очевидная, но часто повторяемая ошибка. Создайте только один экземпляр Searcher и используйте повторно.
  • Хранить в индексе на быстрых дисках. RAM, если вы параноик.
4 голосов
/ 22 декабря 2010

Здесь много мертвых ссылок.

Я бы начал с этих (несколько официальных) ресурсов:

http://wiki.apache.org/lucene-java/ImproveIndexingSpeed

http://wiki.apache.org/lucene-java/ImproveSearchingSpeed

4 голосов
/ 21 марта 2009

Чит. Используйте RAMDirectory , чтобы загрузить весь индекс в оперативную память. После этого все быстро вспыхивает. :)

3 голосов
/ 21 марта 2009

Я обнаружил, что лучшим ответом на вопрос о производительности является его профилирование. Рекомендации хороши, но есть очень много переменных, которые могут повлиять на производительность, таких как размер вашего набора данных, типы запросов, которые вы делаете, типы данных и т. Д.

Получите Профилировщик Netbeans или что-то подобное и попробуйте его различными способами. Используйте статьи, на которые ссылается Митч, но убедитесь, что вы действительно проверяете, что помогает, а что (часто удивительно) вредит.

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

1 голос
/ 26 августа 2015

Для 64-битных машин используйте MMapDirectory вместо RAMDirectory , что очень хорошо объяснено здесь одним из основных коммиттеров Lucene.

...