Apache Lucene

Материал из NLPub

Введение

Apache Lucene — высокопроизводительная библиотека для полнотекстового поиска, реализованная на языке Java.

Официальный ресурс: http://lucene.apache.org/core/

Фичи

Масштабируемость

  • Скорость индексирования: 150GB / час на современном оборудовании [1]
  • Требуемая память (java heap): всего 1MB
  • Инкрементальные и batch-обновления индекса на одной скорости
  • Размер индекса: 20-30% от размера исходной информации

Эффективные и точные алгоритмы поиска

  • Реализован ранжированный поиск — более релевантные результаты на первых позициях
  • поддерживаются разнообразные типы запросов:
    • фразовые запросы (phrase queries),
    • wildcards,
    • запросы с операторами близости между поисковыми термами (proximity queries),
    • диапазонные запросы (range queries);
  • поиск по полю документа (fielded search),
  • сортировка результатов по любому полю (integer, дата, и др.),
  • кросс-индексный поиск с объединённым результатом,
  • обновления индекса, одновременные с поиском,
  • фасетный поиск (faceted search),
  • подсветка результатов,
  • join-ы и группировка результатов,
  • модули авто-подсказок для опечаток и не только,
  • возможность изменения алгоритмов ранжирования, например, VSM и BM25,
  • переопределяемый кодек индекса (отвечает за устройство индекса на диске).

Другие языки и платформы

Существуют реализации на других языках программирования.

Инструменты для работы с индексом

Luke

Luke — это программа-инструментарий для работы с индексом Lucene, находящемся на локальном или удалённом диске, а также в hdfs. Релизы: [2] LukeOverview.png

Проверка и исправление индекса

Источниками неисправности индекса Lucene может быть недостаток памяти в момент обновления / коммита индекса, а также неисправность на аппаратном уровне.

Для восстановления индекса (в тех случаях, когда это возможно), существует инструмент CheckIndex: [3]. Данный инструмент также доступен из интерфейса Luke.

Перед запуском данного инструмента сделайте резервную копию индекса.

Экспорт части или всего индекса в XML

Помимо того, что luke является удобным инструментом для анализа проиндексированных полей сам по себе, предусмотрена возможность экспорта части или всего индекса в формат XML . Например, тут [4] описывается процесс извлечения индексированных токенов (англ.) в формат XML с целью сравнения токенов с токенами в других системах.

Для того, чтобы экспортировать индекс, либо цепочку документов, нужно выбрать из меню Tools пункт Export index to XML:

Screen Shot 2014-09-28 at 11.40.45.png

На рисунке показан процесс экспортирования документов с id 1-10. Альтернативно можно выбрать режим компрессии, особенно в случае экспорта всего либо большой части индекса.

Выходной XML содержит множество характеристик и компонент индекса: поля индекса, количество документов, количество токенов, версия индекса, файлы индекса и их размеры, список сегментов индекса, 50 наиболее частотных токенов по совокупности полей и список запрошенных документов. Обратите внимание, что для вывода проиндексированных токенов необходимо соответствующим образом сконфигурировать целевое поле индекса: добавить термовые вектора, позиции и смещения в потоке токенов.