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