- •Булев поиск.
- •Устройство web и web граф.
- •Синтаксис
- •Построение индекса.
- •Библиотека Lucene.
- •Организация словарей.
- •Зональное ранжирование.
- •Оценка качества поиска.
- •Вероятностная модель ранжирования.
- •Вероятностная модель языка.
- •Современные методы построения языковых моделей.
- •Машинное обучение в ранжирование.
Синтаксис
<a href="URL">...</a>
<a name="идентификатор">...</a>
CSS селекторы.
Селектор – часть CSS-правила, сообщающая браузеру, к какому элементу веб-страницы применен стиль.
Извлечение информации из html страницы с помощью библиотеки jsoup.
Метод parse(String html) разбирает входящий HTML в новый объект Document.
Характеристики поискового робота.
Поисковый робот – программа, являющаяся составной частью поисковой системы и предназначенная для перебора страниц Интернета с целью занесения информации.
Обязательные характеристики:
Устойчивость
Вежливость
Необязательные характеристики:
Распределенность
Масштабируемость
Производительность и эффективность
Качество
Свежесть
Расширяемость
Общая архитектура поискового робота.
Построение индекса.
Однопроходное индексирование.
Однопроходное индексирование – алгоритм индексирования, где используется отдельный словарь для каждого документа. Для каждого нового термина при обработке документа он сохраняется в локальном словаре. Используется в тех случаях, когда коллекция умещается в ОП.
Блочное индексирование.
Блочное индексирование – алгоритм индексирования, похожий на сортировку слиянием. 4 этапа:
Сегментация коллекции
Сортировка пар «термин-документ»
Запись блоков на диск
Объединение блоков
Используется, когда коллекция не помещается в память.
Распределенное индексирование.
Распределенное индексирование используется, когда индекс не помещается на диск на одной машине. Индексирование происходит отдельно в каждом блоке документов.
Динамическое индексирование.
Динамическое индексирование – индексирование, при котором при изменении в блоках коллекции или при добавлении новых строится новый индекс.
Удаление объекта из индекса.
Запрос на удаление подается индексу, затем передается на тот блок, в котором нужно провести удаление, затем эта запись из блока удаляется, и снова происходит слияние блоков в памяти.
Организация поиска.
При работе робота поисковой системы копия каждой посещенной страницы сохраняется в БД - кэше поисковой системы. Он состоит из:
кэша документов, в котором хранится индекс.
Кэша запросов, в котором хранятся блоки коллекции.
Кэша полей, в котором хранится журнал предзаписи (WAL). В нем отражаются все изменения и удаления записей из блоков коллекции.
Библиотека Lucene.
Lucene – свободная библиотека для полнотекстового поиска, используемая в качестве основы в 2 самых популярных (на 2010 г.) поисковых системах - Elasticsearch и Solr. Написана на Java. Её особенности:
Легко масштабируется
Компактность
Высокая скорость работы
Высокая скорость индексации
Эффективные алгоритмы поиска
Поиск по полю
Сортировка по любому полю
Lucene основные концепции.
В основе Lucene лежит представление информации в виде документов. Каждый документ – одно или несколько полей. Поля служат для хранения индексируемой информации, а также метаданных, в которых описывается, как именно Lucene должен обрабатывать содержимое поля. Выбор того, как именно информация должна представляться в виде документов и полей, остается за разработчиком.
Типы полей.
Индексированное поле - оно определяет, будет ли построен индекс по этому полю. По таким полям возможна сортировка и поиск.
Хранимое поле – определяет, попадет ли поле в хранилище документов и нужно ли это значение в поиске.
Токенизированное поле – определяет, нужна ли доп. обработка значения.
Создание индекса.
Индекс состоит из инвертированного индекса и хранилища документов.
Создание документа.
Документ – это список полей, в котором нет ограничений на повторяемость имени и которому при индексировании присваивается docID.
Управление индексом.
Индексация документа - analyzer, tokenizer, token filter.
Analyzer – элемент с дочерними элементами, которые называют фабричные классы для токенизатора и используемые фильтры в том порядке, в котором они описаны.
Tokenizer – токенизатор, описываемый в начале анализатора. Типы:
StandardTokenizer – разбивает предложение на слова.
KeywordTokenizer – обрабатывает всё текстовое поле как один токен.
PatternTokenizer – использует регулярное выражение для разбиения текстового потока на токены.
Типы фильтров:
LowerCaseFilter – приводит к нижнему регистру
StopFilter – удаляет стоп-слова.
EnglishMinimalStemFilter – приводит слово к основе
NGramTokenFilter – N-граммы вместо слов.
Запросы.
Запрос – набор ключевых слов со знаками логических операций.
TermQuery, BooleanQuery и т.д.
Типы запросов:
TermQuery – наличие токена в документе.
BooleanQuery – условие на основе других запросов.
TermRangeQuery – диапазон текстовых токенов.
NumericRangeQuery – числовой диапазон
FuzzyQuery – поиск с неточным соответствием.
PhraseQuery – поиск по последовательности ключевых слов.
RegexQuery – поиск по регулярному выражению.
Язык запросов.
Язык запросов – набор правил, с помощью которых можно сформулировать свой запрос. Обычно является подобием языка регулярных выражений. Состоит из логических операторов, префиксов обязательности, возможности учета расстояния между словами, морфологии языка, регистра слов и т.д.