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

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

  • Upload
    ontico

  • View
    899

  • Download
    3

Embed Size (px)

Citation preview

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 решений (Алексей Рагозин)

Спасибо

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