Apache Lucene
Введение
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]
Проверка и исправление индекса
Источниками неисправности индекса Lucene может быть недостаток памяти в момент обновления / коммита индекса, а также неисправность на аппаратном уровне.
Для восстановления индекса (в тех случаях, когда это возможно), существует инструмент CheckIndex: [3]. Данный инструмент также доступен из интерфейса Luke.
Перед запуском данного инструмента сделайте резервную копию индекса.
Экспорт части или всего индекса в XML
Помимо того, что luke является удобным инструментом для анализа проиндексированных полей сам по себе, предусмотрена возможность экспорта части или всего индекса в формат XML . Например, тут [4] описывается процесс извлечения индексированных токенов (англ.) в формат XML с целью сравнения токенов с токенами в других системах.
Для того, чтобы экспортировать индекс, либо цепочку документов, нужно выбрать из меню Tools пункт Export index to XML:
На рисунке показан процесс экспортирования документов с id 1-10. Альтернативно можно выбрать режим компрессии, особенно в случае экспорта всего либо большой части индекса.
Выходной XML содержит множество характеристик и компонент индекса: поля индекса, количество документов, количество токенов, версия индекса, файлы индекса и их размеры, список сегментов индекса, 50 наиболее частотных токенов по совокупности полей и список запрошенных документов. Обратите внимание, что для вывода проиндексированных токенов необходимо соответствующим образом сконфигурировать целевое поле индекса: добавить термовые вектора, позиции и смещения в потоке токенов.