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

Post on 24-May-2015

1.495 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

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

elasticserach сервер

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

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

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

...

запрос

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

статистика

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

стемер

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

КО

НТ

ЕН

Т /

ДО

КУ

МЕ

НТ

Ы

ПО

ИС

КО

ВЫ

Й U

I

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

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

Термы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

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

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

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

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

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

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

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

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

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

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

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

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

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

• “more like this”

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

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

категорий

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

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

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

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

документов

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

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

коррекции

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

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

Подсказки

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

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

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

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

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

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

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

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

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

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

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

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

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

#1 #1

#2

#1

#2

#3

#1

#4

#6

#5

#5

#6

#6

#7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо

Алексей Рагозинalexey.ragozin@gmail.com

top related