SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Поиск на своем сайте,
обзор open source решений
      Алексей Рагозин
Поиск на своём сайте
• Искать SQLем по своей базе
  o Вы наверное не слышали об альтернативах?
• Использовать поиск от                  /
  o Отличный вариант для небольших сайтов
• Установить у себя поисковый движок

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




                                                                             КОНТЕНТ / ДОКУМЕНТЫ
                                                    поисковые
ПОИСКОВЫЙ UI




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

                           статистика
Поисковый документ
                           Термы
                           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. SQL
SQL                         Поисковый запрос
• cложный запросы / joins   • “плоский” select
• детерминированный         • сложные комбинации
  запрос                      атрибутов
• возвращает данные         • нечёткие запросы
                            • ранжирование
                            • возвращает метаданные
Open Source
Lucene – библиотека / фреймворк - 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
    Логарифмическое слияние сегментов
                      #3     #5     #6
                                           #7
                                    #5
              #2      #2     #4


                                    #6     #6
       #1     #1      #1     #1




Самые молодые сегменты можно не спешить писать на диск
Масштабирование
Производительность
• Упирается в 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 tank
Index tank появился как поисковый SaaS. После покупки
компании, код продукта был опубликован как open source.

• Фокус: социальный контент и crowd sourcing
• Ранжирование по динамическим атрибутам
  (голоса, рейтинг и т.п.)
• Управление поисковым “облаком”
Спасибо

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

Weitere ähnliche Inhalte

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

Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Ontico
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумоеAlexander Byndyu
 
Spcua 2013 кожемякин-алексей
Spcua 2013 кожемякин-алексейSpcua 2013 кожемякин-алексей
Spcua 2013 кожемякин-алексейAlex Kozhemiakin
 
Lan-Crawler Bachlor RU
Lan-Crawler Bachlor RULan-Crawler Bachlor RU
Lan-Crawler Bachlor RUcDima
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchИлья Середа
 
32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексыRoman Brovko
 
Lucene in odnoklassniki.ru
Lucene in odnoklassniki.ruLucene in odnoklassniki.ru
Lucene in odnoklassniki.ruDmitry Buzdin
 
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...odnoklassniki.ru
 
Cфинкс и поиск терабайта
Cфинкс и поиск терабайтаCфинкс и поиск терабайта
Cфинкс и поиск терабайтаMedia Gorod
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Ontico
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенкоYandex
 
Практический курс SEO для Bewebby, введение в SEO, семантика для сайта
Практический курс SEO для Bewebby, введение в SEO, семантика для сайтаПрактический курс SEO для Bewebby, введение в SEO, семантика для сайта
Практический курс SEO для Bewebby, введение в SEO, семантика для сайтаSEO-Интеллект
 
SharePoint Search от мала до велика
SharePoint Search от мала до великаSharePoint Search от мала до велика
SharePoint Search от мала до великаVitaly Baum
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricksSveta Bozhko
 
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1rit2011
 
SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1seo-intellect
 

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

Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумое
 
Spcua 2013 кожемякин-алексей
Spcua 2013 кожемякин-алексейSpcua 2013 кожемякин-алексей
Spcua 2013 кожемякин-алексей
 
Lan-Crawler Bachlor RU
Lan-Crawler Bachlor RULan-Crawler Bachlor RU
Lan-Crawler Bachlor RU
 
Где сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearchГде сегодня использовать ElasticSearch
Где сегодня использовать ElasticSearch
 
32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы
 
Lucene in odnoklassniki.ru
Lucene in odnoklassniki.ruLucene in odnoklassniki.ru
Lucene in odnoklassniki.ru
 
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
 
Cфинкс и поиск терабайта
Cфинкс и поиск терабайтаCфинкс и поиск терабайта
Cфинкс и поиск терабайта
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Информационный поиск. Методы оценки качества поиска. Эволюция результатов
Информационный поиск. Методы оценки качества поиска. Эволюция результатовИнформационный поиск. Методы оценки качества поиска. Эволюция результатов
Информационный поиск. Методы оценки качества поиска. Эволюция результатов
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенко
 
Савостин. Системы и методы научного поиска и мониторинга
Савостин. Системы и методы научного поиска и мониторингаСавостин. Системы и методы научного поиска и мониторинга
Савостин. Системы и методы научного поиска и мониторинга
 
Практический курс SEO для Bewebby, введение в SEO, семантика для сайта
Практический курс SEO для Bewebby, введение в SEO, семантика для сайтаПрактический курс SEO для Bewebby, введение в SEO, семантика для сайта
Практический курс SEO для Bewebby, введение в SEO, семантика для сайта
 
SharePoint Search от мала до велика
SharePoint Search от мала до великаSharePoint Search от мала до велика
SharePoint Search от мала до велика
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricks
 
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
 
SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1
 
Biodb 2011-03
Biodb 2011-03Biodb 2011-03
Biodb 2011-03
 

Mehr von Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

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

  • 1. Поиск на своем сайте, обзор open source решений Алексей Рагозин
  • 2. Поиск на своём сайте • Искать SQLем по своей базе o Вы наверное не слышали об альтернативах? • Использовать поиск от / o Отличный вариант для небольших сайтов • Установить у себя поисковый движок elasticserach сервер
  • 3. Ингредиенты поиска КОНТЕНТ / ДОКУМЕНТЫ поисковые ПОИСКОВЫЙ UI запрос документы парсер парсер Индексный спелчекер анализатор движок ... стемер результат поиска статистика
  • 4. Поисковый документ Термы 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 токенизаиця , стеминг, морфология, стоп-слова
  • 5. Поисковый индекс Типичная RDBMS • Инвертированный индекс • Индекс по одному полю или по композитному атрибуту • Одно значение на атрибуту (full text – много значений) • Обычно только один из индексов используется в select`е • B-Tree – эффективная вставка/изменение
  • 6. Поисковый индекс Типичный поисковый движок • Инвертированный индекс • Все атрибуты в одном индексе • Произвольное количество значений атрибута на документ • Поиск происходит по всем атрибута запроса одним махом • Интегрированное ранжирование • Плотный бинарный формат индекса – read only
  • 7. Поисковый запрос vs. SQL SQL Поисковый запрос • cложный запросы / joins • “плоский” select • детерминированный • сложные комбинации запрос атрибутов • возвращает данные • нечёткие запросы • ранжирование • возвращает метаданные
  • 8. Open Source Lucene – библиотека / фреймворк - Java • Solr – всё в одном, прицел на “enterprise” • elasticsearch – простота • IndexTank – crowd sourcing Sphinx – скорость / простота - C++
  • 9. Что нужно хотеть от поиска? в дополнение к качественным и релевантным результатам • Фасетная навигация • Подсказки (динамическая классификация) (автодополнение) • Кластеризация • Пространственный поиск • Автокоррекция • в т.ч. с фасетами • “more like this”
  • 10. Фасеты Динамический набор категорий Активный фильтры Число найденных документов по запросу и фильтру
  • 11. Кластеризация Кластеры создаются на основе текста документов
  • 12. Автокоррекция n-gram индекс Нечёткий поиск • Отдельный индекс для • Работает по основному коррекции индексу • Levinstein automata - Lucene
  • 13. Подсказки Похоже на автокоррекцию. Запрос “дописывается” на основе словаря по индексу и дополняется ключевыми словами на основе статистики.
  • 14. Пространственный поиск • Поддержка geodist – Lucene, Sphinx – зачёт • Индекс по декартовой сетке - Solr
  • 15. Что индексировать? Файлы?  Apache Tika – извлечение метаданных из файлов определения типа контента определение языка определение кодовой страницы Microsoft Office, Open Office, PDF, HTML, Unix mailbox, … Достать тэги из mp3? - не вопрос
  • 16. Что индексировать? Индекс плоский, область поиска - не всегда Каталог продуктов • Джинсы Levis #559, индиго • Джинсы Levis #559, индиго, размер 32x32 Что считать документом?
  • 17. Когда индексировать? Поисковые индексы нужно перестраивать Периодическая переиндексация всех документов • Динамические атрибуты (пример наличие на складе) Сегментированный индекс • Позволяет изменять набор документов без перестройки всего индекса • Требует регулярной “оптимизации” индекса
  • 18. Индексные сегменты в Lucene Логарифмическое слияние сегментов #3 #5 #6 #7 #5 #2 #2 #4 #6 #6 #1 #1 #1 #1 Самые молодые сегменты можно не спешить писать на диск
  • 19. Масштабирование Производительность • Упирается в CPU • Сложные запросы могут быть очень CPU-ёмкими Решение – несколько реплик индекса • read-only файлы облегчают задачу
  • 20. Масштабирование Объём индекса • Индекс должен помещаться в память • Решение – партицирование индекса • Каждая партиция выполняет скоринг независимо • Результаты нужно агрегировать
  • 21. Резюме: Lucene • Фреймворк/библиотека • Java API (нет сетевого интерфейса) • Фундамент построения поисковой системы • Встраиваемый (в т.ч. in-memory индексы) • 3.x – примитивная модель ранжирования
  • 22. Резюме: Solr • Feature reach поиск из коробки • Эффективная поддержка фасетов • Кросс платформенные клиент (HTTP) • Интеграция со многими CMS • Управление распределённым индексом и репликацией • Фокус - “enterprise” приложения • ОБШИРНАЯ экосистема
  • 23. Резюме: Sphinx • Простой и быстрый • Интеграция с MySQL • Интеграция со многими CMS • Базовый поисковый функционал • DIY - фасеты, подсказки и т.п. • Распределённый поиск (партицирование)
  • 24. Резюме: elasticsearch • Управление распределённым индексом • Простой HTTP/JSON API • Нет схемы • Иcпользует Lucene, поиск, фасеты, “more like this”, … • Фокус – простота и масштабируемость
  • 25. Резюме: Index tank Index tank появился как поисковый SaaS. После покупки компании, код продукта был опубликован как open source. • Фокус: социальный контент и crowd sourcing • Ранжирование по динамическим атрибутам (голоса, рейтинг и т.п.) • Управление поисковым “облаком”
  • 26. Спасибо Алексей Рагозин alexey.ragozin@gmail.com