SlideShare a Scribd company logo
Как устроен поиск


Андрей Аксенов, 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

More Related Content

Similar to Как устроен поиск

Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поиск
Andrew Aksyonoff
 
Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Ontico
 
Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)
Ontico
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Ontico
 
Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)
Ontico
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"
Fwdays
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014it-people
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Ontico
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодAndrew Aksyonoff
 
Компания навыворот (Андрей Аксенов)
Компания навыворот (Андрей Аксенов)Компания навыворот (Андрей Аксенов)
Компания навыворот (Андрей Аксенов)Ontico
 
Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"
Fwdays
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
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 retrievalAnton Konushin
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Unigine Corp.
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Ontico
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
Roman Dvornov
 

Similar to Как устроен поиск (20)

Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поиск
 
Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)
 
Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
 
Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)Хочу все сжать / Андрей Аксенов (Sphinx)
Хочу все сжать / Андрей Аксенов (Sphinx)
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
 
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
 
Компания навыворот (Андрей Аксенов)
Компания навыворот (Андрей Аксенов)Компания навыворот (Андрей Аксенов)
Компания навыворот (Андрей Аксенов)
 
Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"Андрей Аксенов "Магия сжатия"
Андрей Аксенов "Магия сжатия"
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
 
Андрей Аксёнов, 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
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 

Как устроен поиск

  • 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.