SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Поиск на своем сайте,
обзор 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
• Ранжирование по динамическим атрибутам
  (голоса, рейтинг и т.п.)
• Управление поисковым “облаком”
Поиск на естественном языке
Apache UIMA
• Термы обогащаются семантическими атрибутами на этапе
  индексации
• Определение частей речи
• Machine learning для извлечения семантики
• Специальный поисковый парсер
• Английский язык
Спасибо

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

Weitere ähnliche Inhalte

Was ist angesagt?

Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...Ontico
 
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Ontico
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностейAleksey Solntsev
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...Vyacheslav Nikulin
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricksSveta Bozhko
 
Особенности тестирования NoSQL приложений
Особенности тестирования NoSQL приложенийОсобенности тестирования NoSQL приложений
Особенности тестирования NoSQL приложенийSQALab
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахAlexey Vasiliev
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Ontico
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceEYevseyeva
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Ontico
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Ontico
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминHOWWEDOIT
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)Ontico
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusOntico
 
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...Tanya Denisyuk
 

Was ist angesagt? (19)

Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
 
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
NoSQL - взрыв возможностей
NoSQL - взрыв возможностейNoSQL - взрыв возможностей
NoSQL - взрыв возможностей
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricks
 
Highload: проблемы и решения
Highload: проблемы и решенияHighload: проблемы и решения
Highload: проблемы и решения
 
Особенности тестирования NoSQL приложений
Особенности тестирования NoSQL приложенийОсобенности тестирования NoSQL приложений
Особенности тестирования NoSQL приложений
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
 
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)Архитектура HAWQ / Алексей Грищенко (Pivotal)
Архитектура HAWQ / Алексей Грищенко (Pivotal)
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 Rus
 
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
 

Andere mochten auch

ORM and distributed caching
ORM and distributed cachingORM and distributed caching
ORM and distributed cachingaragozin
 
High Performance Computing - Cloud Point of View
High Performance Computing - Cloud Point of ViewHigh Performance Computing - Cloud Point of View
High Performance Computing - Cloud Point of Viewaragozin
 
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Ontico
 
системный анализ и реинжиниринг
системный анализ и реинжинирингсистемный анализ и реинжиниринг
системный анализ и реинжинирингAleksandr Barmin
 
Секреты сборки мусора в Java [DUMP-IT 2012]
Секреты сборки мусора в Java [DUMP-IT 2012]Секреты сборки мусора в Java [DUMP-IT 2012]
Секреты сборки мусора в Java [DUMP-IT 2012]aragozin
 
Александр Воинов - Тренды Web
Александр Воинов - Тренды WebАлександр Воинов - Тренды Web
Александр Воинов - Тренды WebDrupalSib
 
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.Uzbekistan Rugby Federation
 
Lucene in odnoklassniki.ru
Lucene in odnoklassniki.ruLucene in odnoklassniki.ru
Lucene in odnoklassniki.ruDmitry Buzdin
 
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими рукамиЕвгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими рукамиDrupalSib
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумоеAlexander Byndyu
 
Производительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыПроизводительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыYandex
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумоеTimur Rakhmatillaev
 
Строим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данныхСтроим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данныхVitebsk Miniq
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
From distributed caches to in-memory data grids
From distributed caches to in-memory data gridsFrom distributed caches to in-memory data grids
From distributed caches to in-memory data gridsMax Alexejev
 
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."elenae00
 

Andere mochten auch (17)

ORM and distributed caching
ORM and distributed cachingORM and distributed caching
ORM and distributed caching
 
High Performance Computing - Cloud Point of View
High Performance Computing - Cloud Point of ViewHigh Performance Computing - Cloud Point of View
High Performance Computing - Cloud Point of View
 
code4russia
code4russiacode4russia
code4russia
 
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
 
системный анализ и реинжиниринг
системный анализ и реинжинирингсистемный анализ и реинжиниринг
системный анализ и реинжиниринг
 
Секреты сборки мусора в Java [DUMP-IT 2012]
Секреты сборки мусора в Java [DUMP-IT 2012]Секреты сборки мусора в Java [DUMP-IT 2012]
Секреты сборки мусора в Java [DUMP-IT 2012]
 
Александр Воинов - Тренды Web
Александр Воинов - Тренды WebАлександр Воинов - Тренды Web
Александр Воинов - Тренды Web
 
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
Реинжиниринг бизнес-процессов, как результат внедрения программного обеспечения.
 
Lucene in odnoklassniki.ru
Lucene in odnoklassniki.ruLucene in odnoklassniki.ru
Lucene in odnoklassniki.ru
 
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими рукамиЕвгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
Евгений Ильин. Drupal + Solr: Яндекс.Маркет своими руками
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумое
 
Производительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыПроизводительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформы
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумое
 
Строим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данныхСтроим плот - Как не утонуть в данных
Строим плот - Как не утонуть в данных
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
From distributed caches to in-memory data grids
From distributed caches to in-memory data gridsFrom distributed caches to in-memory data grids
From distributed caches to in-memory data grids
 
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
Антон Терехов "Промышленные e-commerce платформы. Опыт поиска."
 

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

Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)Ontico
 
Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Ontico
 
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
 
Cфинкс и поиск терабайта
Cфинкс и поиск терабайтаCфинкс и поиск терабайта
Cфинкс и поиск терабайтаMedia Gorod
 
32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексыRoman Brovko
 
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...odnoklassniki.ru
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Ontico
 
SharePoint Search от мала до велика
SharePoint Search от мала до великаSharePoint Search от мала до велика
SharePoint Search от мала до великаVitaly Baum
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенкоYandex
 
Фишки из патентов Google на GuruConf-2017
Фишки из патентов Google на GuruConf-2017Фишки из патентов Google на GuruConf-2017
Фишки из патентов Google на GuruConf-2017Taras Gushcha
 
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1rit2011
 
SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1seo-intellect
 
Практический курс SEO для Bewebby, введение в SEO, семантика для сайта
Практический курс SEO для Bewebby, введение в SEO, семантика для сайтаПрактический курс SEO для Bewebby, введение в SEO, семантика для сайта
Практический курс SEO для Bewebby, введение в SEO, семантика для сайтаSEO-Интеллект
 
68 - Spring. Функционал
68 - Spring. Функционал68 - Spring. Функционал
68 - Spring. ФункционалRoman Brovko
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksRoman Pavlushko
 

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

Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
 
Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)Виталий Гаврилов (Ленвендо)
Виталий Гаврилов (Ленвендо)
 
Spcua 2013 кожемякин-алексей
Spcua 2013 кожемякин-алексейSpcua 2013 кожемякин-алексей
Spcua 2013 кожемякин-алексей
 
Lan-Crawler Bachlor RU
Lan-Crawler Bachlor RULan-Crawler Bachlor RU
Lan-Crawler Bachlor RU
 
Cфинкс и поиск терабайта
Cфинкс и поиск терабайтаCфинкс и поиск терабайта
Cфинкс и поиск терабайта
 
Информационный поиск. Методы оценки качества поиска. Эволюция результатов
Информационный поиск. Методы оценки качества поиска. Эволюция результатовИнформационный поиск. Методы оценки качества поиска. Эволюция результатов
Информационный поиск. Методы оценки качества поиска. Эволюция результатов
 
32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы32 - Базы данных. Пространственные индексы
32 - Базы данных. Пространственные индексы
 
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
Как, используя Lucene, построить высоконагруженную систему поиска разнородных...
 
Савостин. Системы и методы научного поиска и мониторинга
Савостин. Системы и методы научного поиска и мониторингаСавостин. Системы и методы научного поиска и мониторинга
Савостин. Системы и методы научного поиска и мониторинга
 
Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...Машинное обучение в электронной коммерции - практика использования и подводны...
Машинное обучение в электронной коммерции - практика использования и подводны...
 
SharePoint Search от мала до велика
SharePoint Search от мала до великаSharePoint Search от мала до велика
SharePoint Search от мала до велика
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенко
 
Фишки из патентов Google на GuruConf-2017
Фишки из патентов Google на GuruConf-2017Фишки из патентов Google на GuruConf-2017
Фишки из патентов Google на GuruConf-2017
 
Фишки из патентов Google
Фишки из патентов GoogleФишки из патентов Google
Фишки из патентов Google
 
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
 
SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1SEO-Коучинг 4.0_Day1
SEO-Коучинг 4.0_Day1
 
Практический курс SEO для Bewebby, введение в SEO, семантика для сайта
Практический курс SEO для Bewebby, введение в SEO, семантика для сайтаПрактический курс SEO для Bewebby, введение в SEO, семантика для сайта
Практический курс SEO для Bewebby, введение в SEO, семантика для сайта
 
68 - Spring. Функционал
68 - Spring. Функционал68 - Spring. Функционал
68 - Spring. Функционал
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 

Mehr von aragozin

Java on Linux for devs and ops
Java on Linux for devs and opsJava on Linux for devs and ops
Java on Linux for devs and opsaragozin
 
I know why your Java is slow
I know why your Java is slowI know why your Java is slow
I know why your Java is slowaragozin
 
Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)aragozin
 
Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016aragozin
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Javaaragozin
 
What every Java developer should know about network?
What every Java developer should know about network?What every Java developer should know about network?
What every Java developer should know about network?aragozin
 
Java profiling Do It Yourself
Java profiling Do It YourselfJava profiling Do It Yourself
Java profiling Do It Yourselfaragozin
 
DIY Java Profiler
DIY Java ProfilerDIY Java Profiler
DIY Java Profileraragozin
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profilingaragozin
 
JIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsJIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsaragozin
 
Casual mass parallel computing
Casual mass parallel computingCasual mass parallel computing
Casual mass parallel computingaragozin
 
Nanocloud cloud scale jvm
Nanocloud   cloud scale jvmNanocloud   cloud scale jvm
Nanocloud cloud scale jvmaragozin
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)aragozin
 
Garbage collection in JVM
Garbage collection in JVMGarbage collection in JVM
Garbage collection in JVMaragozin
 
Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)aragozin
 
Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?aragozin
 
Cборка мусора в Java без пауз (HighLoad++ 2013)
Cборка мусора в Java без пауз  (HighLoad++ 2013)Cборка мусора в Java без пауз  (HighLoad++ 2013)
Cборка мусора в Java без пауз (HighLoad++ 2013)aragozin
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherencearagozin
 
Борьба с GС паузами в JVM
Борьба с GС паузами в JVMБорьба с GС паузами в JVM
Борьба с GС паузами в JVMaragozin
 

Mehr von aragozin (20)

Java on Linux for devs and ops
Java on Linux for devs and opsJava on Linux for devs and ops
Java on Linux for devs and ops
 
I know why your Java is slow
I know why your Java is slowI know why your Java is slow
I know why your Java is slow
 
Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)Java profiling Do It Yourself (jug.msk.ru 2016)
Java profiling Do It Yourself (jug.msk.ru 2016)
 
Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016Java black box profiling JUG.EKB 2016
Java black box profiling JUG.EKB 2016
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Java
 
What every Java developer should know about network?
What every Java developer should know about network?What every Java developer should know about network?
What every Java developer should know about network?
 
Java profiling Do It Yourself
Java profiling Do It YourselfJava profiling Do It Yourself
Java profiling Do It Yourself
 
DIY Java Profiler
DIY Java ProfilerDIY Java Profiler
DIY Java Profiler
 
Java black box profiling
Java black box profilingJava black box profiling
Java black box profiling
 
JIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutionsJIT compilation in modern platforms – challenges and solutions
JIT compilation in modern platforms – challenges and solutions
 
Casual mass parallel computing
Casual mass parallel computingCasual mass parallel computing
Casual mass parallel computing
 
Nanocloud cloud scale jvm
Nanocloud   cloud scale jvmNanocloud   cloud scale jvm
Nanocloud cloud scale jvm
 
Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)Java GC tuning and monitoring (by Alexander Ashitkin)
Java GC tuning and monitoring (by Alexander Ashitkin)
 
Garbage collection in JVM
Garbage collection in JVMGarbage collection in JVM
Garbage collection in JVM
 
Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)Virtualizing Java in Java (jug.ru)
Virtualizing Java in Java (jug.ru)
 
Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?Filtering 100M objects in Coherence cache. What can go wrong?
Filtering 100M objects in Coherence cache. What can go wrong?
 
Cборка мусора в Java без пауз (HighLoad++ 2013)
Cборка мусора в Java без пауз  (HighLoad++ 2013)Cборка мусора в Java без пауз  (HighLoad++ 2013)
Cборка мусора в Java без пауз (HighLoad++ 2013)
 
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherence
 
Борьба с GС паузами в JVM
Борьба с GС паузами в JVMБорьба с GС паузами в JVM
Борьба с GС паузами в JVM
 

Поиск на своем сайте, обзор 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. Поиск на естественном языке Apache UIMA • Термы обогащаются семантическими атрибутами на этапе индексации • Определение частей речи • Machine learning для извлечения семантики • Специальный поисковый парсер • Английский язык
  • 27. Спасибо Алексей Рагозин alexey.ragozin@gmail.com