Поиск на своем сайте, обзор open source решений

27
Поиск на своем сайте, обзор open source решений Алексей Рагозин

Transcript of Поиск на своем сайте, обзор open source решений

Page 1: Поиск на своем сайте, обзор open source решений

Поиск на своем сайте,обзор open source решений

Алексей Рагозин

Page 2: Поиск на своем сайте, обзор open source решений

Поиск на своём сайте• Искать SQLем по своей базе

o Вы наверное не слышали об альтернативах?

• Использовать поиск от / o Отличный вариант для небольших сайтов

• Установить у себя поисковый движок

elasticserach сервер

Page 3: Поиск на своем сайте, обзор open source решений

Ингредиенты поиска

Индексныйдвижок

парсерспелчекер

...

запрос

результат поиска

статистика

парсеранализатор

стемер

поисковые документы

КО

НТ

ЕН

Т /

ДО

КУ

МЕ

НТ

Ы

ПО

ИС

КО

ВЫ

Й U

I

Page 4: Поиск на своем сайте, обзор open source решений

Поисковый документ

Анализ документа:токенизаиця , стеминг, морфология, стоп-слова

Термыid:184647753295609857 author:pledbook tag:grails tag:elasticserach text:look text:use text:plugin text:grails text:website url:grails.org/plugin/... date:2012.03.27

Page 5: Поиск на своем сайте, обзор open source решений

Поисковый индексТипичная RDBMS• Инвертированный индекс• Индекс по одному полю или по композитному атрибуту• Одно значение на атрибуту (full text – много значений)• Обычно только один из индексов используется в select`е• B-Tree – эффективная вставка/изменение

Page 6: Поиск на своем сайте, обзор open source решений

Поисковый индексТипичный поисковый движок• Инвертированный индекс• Все атрибуты в одном индексе• Произвольное количество значений атрибута на документ• Поиск происходит по всем атрибута запроса одним махом• Интегрированное ранжирование• Плотный бинарный формат индекса – read only

Page 7: Поиск на своем сайте, обзор open source решений

Поисковый запрос vs. SQLSQL• cложный запросы / joins• детерминированный

запрос• возвращает данные

Поисковый запрос• “плоский” select• сложные комбинации

атрибутов• нечёткие запросы• ранжирование• возвращает метаданные

Page 8: Поиск на своем сайте, обзор open source решений

Open SourceLucene – библиотека / фреймворк - Java• Solr – всё в одном, прицел на “enterprise”• elasticsearch – простота• IndexTank – crowd sourcing

Sphinx – скорость / простота - C++

Page 9: Поиск на своем сайте, обзор open source решений

Что нужно хотеть от поиска?

• Фасетная навигация(динамическая классификация)

• Кластеризация• Автокоррекция

• Подсказки (автодополнение)

• Пространственный поиск• в т.ч. с фасетами

• “more like this”

в дополнение к качественным и релевантным результатам

Page 10: Поиск на своем сайте, обзор open source решений

ФасетыДинамический набор

категорий

Число найденных документовпо запросу и фильтру

Активный фильтры

Page 11: Поиск на своем сайте, обзор open source решений

Кластеризация

Кластеры создаются на основе текста

документов

Page 12: Поиск на своем сайте, обзор open source решений

Автокоррекция

n-gram индекс• Отдельный индекс для

коррекции

Нечёткий поиск• Работает по основному

индексу• Levinstein automata - Lucene

Page 13: Поиск на своем сайте, обзор open source решений

Подсказки

Похоже на автокоррекцию. Запрос “дописывается” на основе словаря по индексу и дополняется ключевыми словами на основе статистики.

Page 14: Поиск на своем сайте, обзор open source решений

Пространственный поиск

• Поддержка geodist – Lucene, Sphinx – зачёт• Индекс по декартовой сетке - Solr

Page 15: Поиск на своем сайте, обзор open source решений

Что индексировать?Файлы? Apache Tika – извлечение метаданных из файлов

определения типа контентаопределение языкаопределение кодовой страницыMicrosoft Office, Open Office, PDF, HTML, Unix mailbox, …

Достать тэги из mp3? - не вопрос

Page 16: Поиск на своем сайте, обзор open source решений

Что индексировать?Индекс плоский, область поиска - не всегдаКаталог продуктов• Джинсы Levis #559, индиго• Джинсы Levis #559, индиго, размер 32x32Что считать документом?

Page 17: Поиск на своем сайте, обзор open source решений

Когда индексировать?Поисковые индексы нужно перестраивать

Периодическая переиндексация всех документов• Динамические атрибуты (пример наличие на складе)

Сегментированный индекс• Позволяет изменять набор документов без перестройки

всего индекса• Требует регулярной “оптимизации” индекса

Page 18: Поиск на своем сайте, обзор open source решений

Индексные сегменты в LuceneЛогарифмическое слияние сегментов

Самые молодые сегменты можно не спешить писать на диск

#1 #1

#2

#1

#2

#3

#1

#4

#6

#5

#5

#6

#6

#7

Page 19: Поиск на своем сайте, обзор open source решений

МасштабированиеПроизводительность• Упирается в CPU• Сложные запросы могут быть очень CPU-ёмкимиРешение – несколько реплик индекса

• read-only файлы облегчают задачу

Page 20: Поиск на своем сайте, обзор open source решений

МасштабированиеОбъём индекса• Индекс должен помещаться в память• Решение – партицирование индекса

• Каждая партиция выполняет скоринг независимо• Результаты нужно агрегировать

Page 21: Поиск на своем сайте, обзор open source решений

Резюме: Lucene• Фреймворк/библиотека• Java API (нет сетевого интерфейса)• Фундамент построения поисковой системы• Встраиваемый (в т.ч. in-memory индексы)• 3.x – примитивная модель ранжирования

Page 22: Поиск на своем сайте, обзор open source решений

Резюме: Solr• Feature reach поиск из коробки• Эффективная поддержка фасетов• Кросс платформенные клиент (HTTP)• Интеграция со многими CMS• Управление распределённым индексом и репликацией• Фокус - “enterprise” приложения• ОБШИРНАЯ экосистема

Page 23: Поиск на своем сайте, обзор open source решений

Резюме: Sphinx• Простой и быстрый• Интеграция с MySQL• Интеграция со многими CMS• Базовый поисковый функционал

• DIY - фасеты, подсказки и т.п.

• Распределённый поиск (партицирование)

Page 24: Поиск на своем сайте, обзор open source решений

Резюме: elasticsearch• Управление распределённым индексом• Управление кластером (дискавери, балансировка)• Простой HTTP/JSON API• Нет жесткой схемы• Иcпользует Lucene – поиск, фасеты, “more like this”, …• Фокус – простота и масштабируемость

Page 25: Поиск на своем сайте, обзор open source решений

Резюме: Index tankIndex tank появился как поисковый SaaS. После покупки компании, код продукта был опубликован как open source.

• Фокус: социальный контент и crowd sourcing• Ранжирование по динамическим атрибутам

(голоса, рейтинг и т.п.)• Управление поисковым “облаком”

Page 26: Поиск на своем сайте, обзор open source решений

Поиск на естественном языкеApache UIMA• Термы обогащаются семантическими атрибутами на этапе

индексации• Определение частей речи• Machine learning для извлечения семантики• Специальный поисковый парсер• Английский язык

Page 27: Поиск на своем сайте, обзор open source решений

Спасибо

Алексей Рагозин[email protected]