-
Notifications
You must be signed in to change notification settings - Fork 0
Indexer
Индексатор
-
Что такое индексатор Индексирование в поисковых системах — процесс добавления сведений (о сайте) роботом поисковой машины в базу данных, впоследствии использующуюся для (полнотекстового) поиска информации на проиндексированных сайтах. Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путем последовательного просмотра таблицы строка за строкой может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска.
-
Как устроен Indexer в проекте amse-agregator (http://code.google.com/p/amse-agregator/) В этом проекте создаются индексные файлы для таблиц БД. Pacage src/.../indexer/ содержит следующие файлы: IndexerMain.java - содержит описание класса, который в зависимости от переданных аргументов либо создает новый индексный файл, либо либо открывает для редактирования уже существующий, далее вызывает методы класса OriginalIndexer для заполнения индексных файлов, при этом подсчитывает время, потраченное на индексацию. OriginalIndexer.java - реализует всю логику создания индексных файлов на основе таблиц БД. Использует библиотеку org.apache.lucene, модуль для работы с БД. Основной метод класса: index() - извлекает все данные из БД и индексирует(добавляет информацию о них в индексный файл). IndexerWithSeparatedStorage.java - делает то же самое, что и OriginalIndexer, но при этом индексные файлы, соответствующие различным таблицам сохраняет в различных директориях(для каждой таблицы своя директория).
-
Что предположительно необходимо поменять в коде, чтобы использовать в нашем проекте
- файл OriginalIndexer: те методы, которые работают с конкретными сущностями (таблицами) для проекта amse-agregator, там необходимо изменить количество и названия полей сущностей.
- indexer использует ru.amse.agregator.storage.DBWrapper и ru.amse.agregator.storage.Database - соответственно необходимо будет изменить и эти классы.
-
Что необходимо, чтобы у нас был Indexer библиотека Apache Lucene - это свободная библиотека для высокоскоростного полнотекстового поиска, написанная на Java. http://lucene.apache.org/
Основные возможности The Apache Lucene
-
Масштабируемая и высокоскоростная индексация o свыше 20MB в минуту на Pentium M 1.5GHz o требуется малый объем RAM — «heap» всего 1MB o размер индекса примерно 20-30 % от размера исходного текста
-
Мощный, точный и эффективный поисковый алгоритм o ранжированный поиск — лучшие результаты показываются первыми o множество мощных типов запросов: запрос фразы, wildcard запросы, поиск интервалов и т. д. o поиск основанный на «полях» (таких как, заголовок, автор, текст) o возможность сортировать по различным полям o multiple-index поиск с возможностью объединения результатов o возможность одновременного поиска и обновления индекса
-
кроссплатформное решение o исходный код полностью написан на Java o наличие портов на другие языки программирования
Классы библиотеки Apache Lucene, которые используются в проекте:
-
Document - класс, описывающий сущность документа. Документ - набор полей. Каждое поле имеет имя и значение. Документ может быть извлечен из индексного файла.
-
StandardAnalyzer - реализация класса Analyzer. Создает TokenStreams, который анализирует текст: извлекает термины индекса из текста. Обычно входной поток символов разбивается на token`ы, далее к ним применяются различные фильтры.
-
IndexWriter - создает индексные файлы (добавляет документы в файл, редактирует/удаляет документы из файла). Может оптимизировать процесс поиска по индексным файлам, открытым классом IndexerWriter, но еще с не закрытым дескриптором.