SlideShare uma empresa Scribd logo
1 de 35
Как устроен поиск


Андрей Аксенов, Sphinx
КТО ЗДЕСЬ
• Зовут Андрей, резидент HL, 3 клона ;)
• Делал вебню, игры, поиск
• Знаю много страшных слов

• Вчера про “скорость” в целом
• Сейчас про “поиск” в целом
• Ничего нового, все украдено, explicit lyrics
О чем речь
•   Не про Sphinx
•   Не про Lucene
•   Не про Yandex
•   Не про Google
•   Не про науку
•   Не про рынок
•   Обзор про технологию
О чем речь 2.0
•   Не про библиотеки бумажных книг
•   Не про уголовный розыск
•   Не про поиск отпечатков пальцев
•   Не про скоростной выбор парных носков
•   Не про поиск по картинкам
•   Не про идентификацию песен и видео
•   Про старый добрый тупой поиск по тексту
“Часть” 0
Как оно в целом
4 условные стадии
• Сбор данных
  – Например, web crawling, сканирование, итп
  – Пропустим для ясности!!!
• Индексация
• Поиск
• Масштабирование
  – Агрегация, репликация, HA, LB, итп
Часть 1
Индексация
Как устроена индексация
• Экстракция текста
  – PDF, HTML, … -> текст
• Токенизация
  – Разваливаем текст на токены
• Морфологическая обработка
  – Стемминг либо лемматизация, POS, WSD, …
• Создание инвертированного индекса
Как устроен индекс
“Движок” за 15 минут
CREATE TABLE mysearchindex (
     keyword VARCHAR(255) NOT NULL,
     docid INTEGER NOT NULL,
     UNIQUE(keyword, docid) );
/* а можно даже в MS Word! */
/* но есть нюанс… */
Чем слегка уступает наш “движок”?
• [+] Ключевые слова ведь найдены!!!
• [-] Эффективность?
    • Память? Диск? Процессор
•   [-] Ранжирование?
•   [-] Сортировка?
•   [-] Морфология?
•   [-] Семантика?
    • Не, не слышал
Чуть подробнее про индекс
• Словарь + списки документов

•   Абыр       => [ 123 ]
•   Валг       => [ 123 ]
•   Васечкин   => * 7, 40, 42, 1917, 2012, … +
•   Вася       => [ 3, 15, 40, 2012, … +
•   Петров     => * 2, 3, 5, 8, 13, … +
•   Петя       => * 2, 4, 8, 16, … +
Чуть подробнее про индекс
• Словарь + списки документов + позиций

• Абыр        => [ <123, {10,20,30…}> ]
• Валг        => [ <123, {7,21,47…} ]
• …
Про эффективность
• Keyword + docid в базе = ?
  – Все (!) копии слов по много (!) раз
  – 4-8 байт на docid
  – 4 байта на позицию
  – Умножить на 2 с небольшим для индекса
• Итого = несколько раз от размера текста
• Особенно если с позициями итп POS
Как быть!
• Сортировка и сжатие!

•   Абыр       => [ 123 ]
•   Валг       => [ 123 ]
•   Васечкин   => * 7, 40, 42, 1917, 2012, … +
•   Вася       => [ 3, 15, 40, 2012, … +
•   Петров     => * 2, 3, 5, 8, 13, … +
•   Петя       => * 2, 4, 8, 16, … +
Дельты
• Васечкин      => * 7, 40, 42, 1917, 2012, … +
  – vs
• Васечкин    => [ 7, 33, 2, 1875, 95, … +
• Ммм, а толку?
Дельты суем в какой-нибудь код
• Битовый
  – Хаффман, Элиас, Голомб, арифметика, итп
• Байтовый
  – Varint
• Блочный
  – Group Varint, S9, S16, PFD
Дельты суем в какой-нибудь код
• Битовый
  – Хаффман, Элиас, Голомб, арифметика, итп
• Байтовый
  – Varint
• Блочный
  – Group Varint, S9, S16, PFD
“Наглядный” “скриншот”
• Varint
  – 1 0001001
  – 1 1001101
  – 0 0010110
• Group Varint
  – Первый байт: 00 01 11 00 = длины (1, 2, 4, 2)
  – Далее: собственно данные
И еще куча фарша поверх…
• POS, морфология, итд итп
• “Ставь точку” ;)
Часть 2
Поиск
Как устроен запрос
• Matching = найти
• Ranking = отранжировать

• Разные требования
  – Ad-hoc веб поиск
  – Химера “поиска на естественном языке”
  – Data mining, поиск по юридическим текстам
  – Поиск на разных (!) языках
Matching
• Простая часть!!!
• По тексту – и не по текст
  – … WHERE MATCH(‘new ways to think’)
  – AND year BETWEEN 1950 AND 1970
• По тексту – операции над списками
• Где нет – либо тоже, либо по атрибутам
• Похоже на базу – но таки иначе
  – Early termination, эффективный UNION/MINUS,
    etc
Ranking
• Сложная часть
• Проблема в общем формально нерешаемая
• Но практически таки да ;)

• Человеческие оценки
  • Без них, увы, никуда
• Метрики качества
  • P, R, AP, MAP, NDCG, Bpref, ERR…)
Например, precision
• Запрос Sphinx
  • Стоит в египте статуя Сфинкса …
  • Sphinx Guns | Buy Online | Free Shipping!
  • Задокументируй одноглазую змею | Sphinx
    (url = http://sphinx.blablabla.com)
  • А что вы знаете о бабочках-Сфинксах?
• Процент попаданий = precision
• Увы, не учитывается порядок
Например, average precision
• Давайте учтем порядок!
  •   Pos 1 = weight 0.5
  •   Pos 2 = weight 0.25
  •   Pos 3 = weight 0.125
  •   …
  •   NB: ЭТИ ВЕСА АБСОЛЮТНО НЕВЕРНЫ
• Давайте усредним кучу запросов!
• И вот… ЦЕЛЬ!
Ranking
• Сигналы
 • Текстовые, внетекстовые
 • Статические, динамические
• Простые формулы
 • TF*IDF
 • BM25 = BM25 ( TF, IDF, DocLength )
• Сложные формулы и машинное обучение
Часть 3
Масштабирование
Слайда нет 
• Извините, 10 утра 

•   Google      = ~1,000,000 машин
•   Yandex      =    ~10,000 машин
•   Craigslist  =        ~30 машин
•   Мой хомячок =        ~0.1 машины
Это все. А теперь…
Вопросы?
shodan@sphinxsearch.com

Mais conteúdo relacionado

Mais procurados

А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014
it-people
 
Как устроен поиск
Как устроен поискКак устроен поиск
Как устроен поиск
Andrew Aksyonoff
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
Oleg Tsarev
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Oleg Tsarev
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомБинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Daniel Podolsky
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Ontico
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Ontico
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
Mikhail Davydov
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Ontico
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest
 

Mais procurados (20)

А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014
 
Как устроен поиск
Как устроен поискКак устроен поиск
Как устроен поиск
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концомБинарные (файловые) хранилища- страшная сказка с мрачным концом
Бинарные (файловые) хранилища- страшная сказка с мрачным концом
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
Олег Бартунов (ГАИШ МГУ), Александр Коротков (Интаро-Софт)
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
 
опыт построения и эксплуатации большого файлового хранилища
опыт построения и эксплуатации большого файлового хранилищаопыт построения и эксплуатации большого файлового хранилища
опыт построения и эксплуатации большого файлового хранилища
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
 
libfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпаlibfpta: в памяти, с персистентностью, быстрее хайпа
libfpta: в памяти, с персистентностью, быстрее хайпа
 
Devconf15
Devconf15Devconf15
Devconf15
 
Барнаул15
Барнаул15Барнаул15
Барнаул15
 

Semelhante a Как устроен поиск (Андрей Аксёнов)

Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)
Ontico
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
it-people
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Ontico
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
Andrew Aksyonoff
 
Компания навыворот (Андрей Аксенов)
Компания навыворот (Андрей Аксенов)Компания навыворот (Андрей Аксенов)
Компания навыворот (Андрей Аксенов)
Ontico
 
Андрей Аксёнов, Sphinx Technologies Inc.
Андрей Аксёнов, Sphinx Technologies Inc.Андрей Аксёнов, Sphinx Technologies Inc.
Андрей Аксёнов, Sphinx Technologies Inc.
Ontico
 
Машинное обучение (Открытый семинар по средам)
Машинное обучение (Открытый семинар по средам)Машинное обучение (Открытый семинар по средам)
Машинное обучение (Открытый семинар по средам)
Pavel Egorov
 
CV2011 Lecture 10. Image retrieval
CV2011 Lecture 10.  Image retrievalCV2011 Lecture 10.  Image retrieval
CV2011 Lecture 10. Image retrieval
Anton Konushin
 
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
it-people
 
Егор Антонов - Онтологии
Егор Антонов - ОнтологииЕгор Антонов - Онтологии
Егор Антонов - Онтологии
Yandex
 

Semelhante a Как устроен поиск (Андрей Аксёнов) (20)

Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поиск
 
Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)
 
Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)
 
Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
 
Компания навыворот (Андрей Аксенов)
Компания навыворот (Андрей Аксенов)Компания навыворот (Андрей Аксенов)
Компания навыворот (Андрей Аксенов)
 
Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"
 
Sphinx 2013
Sphinx 2013Sphinx 2013
Sphinx 2013
 
Андрей Аксёнов, Sphinx Technologies Inc.
Андрей Аксёнов, Sphinx Technologies Inc.Андрей Аксёнов, Sphinx Technologies Inc.
Андрей Аксёнов, Sphinx Technologies Inc.
 
Машинное обучение (Открытый семинар по средам)
Машинное обучение (Открытый семинар по средам)Машинное обучение (Открытый семинар по средам)
Машинное обучение (Открытый семинар по средам)
 
CV2011 Lecture 10. Image retrieval
CV2011 Lecture 10.  Image retrievalCV2011 Lecture 10.  Image retrieval
CV2011 Lecture 10. Image retrieval
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
 
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Егор Антонов - Онтологии
Егор Антонов - ОнтологииЕгор Антонов - Онтологии
Егор Антонов - Онтологии
 
Blackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложенийBlackbox-тестирование веб-приложений
Blackbox-тестирование веб-приложений
 

Mais de Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mais de 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...
 

Как устроен поиск (Андрей Аксёнов)

  • 2. КТО ЗДЕСЬ • Зовут Андрей, резидент HL, 3 клона ;) • Делал вебню, игры, поиск • Знаю много страшных слов • Вчера про “скорость” в целом • Сейчас про “поиск” в целом • Ничего нового, все украдено, explicit lyrics
  • 3. О чем речь • Не про Sphinx • Не про Lucene • Не про Yandex • Не про Google • Не про науку • Не про рынок • Обзор про технологию
  • 4.
  • 5. О чем речь 2.0 • Не про библиотеки бумажных книг • Не про уголовный розыск • Не про поиск отпечатков пальцев • Не про скоростной выбор парных носков • Не про поиск по картинкам • Не про идентификацию песен и видео • Про старый добрый тупой поиск по тексту
  • 7. 4 условные стадии • Сбор данных – Например, web crawling, сканирование, итп – Пропустим для ясности!!! • Индексация • Поиск • Масштабирование – Агрегация, репликация, HA, LB, итп
  • 9. Как устроена индексация • Экстракция текста – PDF, HTML, … -> текст • Токенизация – Разваливаем текст на токены • Морфологическая обработка – Стемминг либо лемматизация, POS, WSD, … • Создание инвертированного индекса
  • 11. “Движок” за 15 минут CREATE TABLE mysearchindex ( keyword VARCHAR(255) NOT NULL, docid INTEGER NOT NULL, UNIQUE(keyword, docid) ); /* а можно даже в MS Word! */ /* но есть нюанс… */
  • 12.
  • 13.
  • 14. Чем слегка уступает наш “движок”? • [+] Ключевые слова ведь найдены!!! • [-] Эффективность? • Память? Диск? Процессор • [-] Ранжирование? • [-] Сортировка? • [-] Морфология? • [-] Семантика? • Не, не слышал
  • 15. Чуть подробнее про индекс • Словарь + списки документов • Абыр => [ 123 ] • Валг => [ 123 ] • Васечкин => * 7, 40, 42, 1917, 2012, … + • Вася => [ 3, 15, 40, 2012, … + • Петров => * 2, 3, 5, 8, 13, … + • Петя => * 2, 4, 8, 16, … +
  • 16. Чуть подробнее про индекс • Словарь + списки документов + позиций • Абыр => [ <123, {10,20,30…}> ] • Валг => [ <123, {7,21,47…} ] • …
  • 17. Про эффективность • Keyword + docid в базе = ? – Все (!) копии слов по много (!) раз – 4-8 байт на docid – 4 байта на позицию – Умножить на 2 с небольшим для индекса • Итого = несколько раз от размера текста • Особенно если с позициями итп POS
  • 18. Как быть! • Сортировка и сжатие! • Абыр => [ 123 ] • Валг => [ 123 ] • Васечкин => * 7, 40, 42, 1917, 2012, … + • Вася => [ 3, 15, 40, 2012, … + • Петров => * 2, 3, 5, 8, 13, … + • Петя => * 2, 4, 8, 16, … +
  • 19. Дельты • Васечкин => * 7, 40, 42, 1917, 2012, … + – vs • Васечкин => [ 7, 33, 2, 1875, 95, … + • Ммм, а толку?
  • 20. Дельты суем в какой-нибудь код • Битовый – Хаффман, Элиас, Голомб, арифметика, итп • Байтовый – Varint • Блочный – Group Varint, S9, S16, PFD
  • 21. Дельты суем в какой-нибудь код • Битовый – Хаффман, Элиас, Голомб, арифметика, итп • Байтовый – Varint • Блочный – Group Varint, S9, S16, PFD
  • 22. “Наглядный” “скриншот” • Varint – 1 0001001 – 1 1001101 – 0 0010110 • Group Varint – Первый байт: 00 01 11 00 = длины (1, 2, 4, 2) – Далее: собственно данные
  • 23. И еще куча фарша поверх… • POS, морфология, итд итп • “Ставь точку” ;)
  • 25. Как устроен запрос • Matching = найти • Ranking = отранжировать • Разные требования – Ad-hoc веб поиск – Химера “поиска на естественном языке” – Data mining, поиск по юридическим текстам – Поиск на разных (!) языках
  • 26. Matching • Простая часть!!! • По тексту – и не по текст – … WHERE MATCH(‘new ways to think’) – AND year BETWEEN 1950 AND 1970 • По тексту – операции над списками • Где нет – либо тоже, либо по атрибутам • Похоже на базу – но таки иначе – Early termination, эффективный UNION/MINUS, etc
  • 27. Ranking • Сложная часть • Проблема в общем формально нерешаемая • Но практически таки да ;) • Человеческие оценки • Без них, увы, никуда • Метрики качества • P, R, AP, MAP, NDCG, Bpref, ERR…)
  • 28. Например, precision • Запрос Sphinx • Стоит в египте статуя Сфинкса … • Sphinx Guns | Buy Online | Free Shipping! • Задокументируй одноглазую змею | Sphinx (url = http://sphinx.blablabla.com) • А что вы знаете о бабочках-Сфинксах? • Процент попаданий = precision • Увы, не учитывается порядок
  • 29. Например, average precision • Давайте учтем порядок! • Pos 1 = weight 0.5 • Pos 2 = weight 0.25 • Pos 3 = weight 0.125 • … • NB: ЭТИ ВЕСА АБСОЛЮТНО НЕВЕРНЫ • Давайте усредним кучу запросов! • И вот… ЦЕЛЬ!
  • 30. Ranking • Сигналы • Текстовые, внетекстовые • Статические, динамические • Простые формулы • TF*IDF • BM25 = BM25 ( TF, IDF, DocLength ) • Сложные формулы и машинное обучение
  • 32. Слайда нет  • Извините, 10 утра  • Google = ~1,000,000 машин • Yandex = ~10,000 машин • Craigslist = ~30 машин • Мой хомячок = ~0.1 машины
  • 33. Это все. А теперь…
  • 34.