Поиск на своем сайте, обзор open source решений
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 1,676 views

 

Statistics

Views

Total Views
1,676
Views on SlideShare
1,051
Embed Views
625

Actions

Likes
0
Downloads
7
Comments
0

7 Embeds 625

http://blog.ragozin.info 452
http://gridwatch.collected.info 167
http://webcache.googleusercontent.com 2
http://orana.info 1
http://cloud.feedly.com 1
http://newsblur.com 1
http://www.newsblur.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • Поиск на своем сайте,обзор 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. SQLSQL Поисковый запрос• cложный запросы / joins • “плоский” select• детерминированный • сложные комбинации запрос атрибутов• возвращает данные • нечёткие запросы • ранжирование • возвращает метаданные
  • Open SourceLucene – библиотека / фреймворк - Java• Solr – всё в одном, прицел на “enterprise”• elasticsearch – простота• IndexTank – crowd sourcingSphinx – скорость / простота - 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 tankIndex tank появился как поисковый SaaS. После покупкикомпании, код продукта был опубликован как open source.• Фокус: социальный контент и crowd sourcing• Ранжирование по динамическим атрибутам (голоса, рейтинг и т.п.)• Управление поисковым “облаком”
  • Поиск на естественном языкеApache UIMA• Термы обогащаются семантическими атрибутами на этапе индексации• Определение частей речи• Machine learning для извлечения семантики• Специальный поисковый парсер• Английский язык
  • Спасибо Алексей Рагозин alexey.ragozin@gmail.com