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


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

PPTX
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
PPT
А. Аксенов "Как устроен NoSql", DUMP-2014
PPT
Цена абстракции, Андрей Аксёнов (Sphinx)
PDF
Haritonov
PDF
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
PDF
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
PPTX
Sphinx 2013
PPT
sphinx Hlpp2008
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
А. Аксенов "Как устроен NoSql", DUMP-2014
Цена абстракции, Андрей Аксёнов (Sphinx)
Haritonov
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Извлечение информации из веб-страниц - Михаил Коробов, PyCon RU 2014
Sphinx 2013
sphinx Hlpp2008

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

PPT
Cфинкс и поиск терабайта
PDF
20120226 information retrieval raskovalov_lecture03-04
PDF
20111001 information retrieval raskovalov_lecture2
PPTX
Про качественный поиск
PDF
Принципы работы поисковой системы
PDF
Принципы работы поисковой системы
PPTX
Как устроен поиск / Андрей Аксенов (Sphinx)
PPT
Почему оно не находится! / Андрей Аксенов (Sphinx)
PDF
Андрей Аксёнов, Sphinx Technologies Inc.
PPT
Про качественный поиск (Андрей Аксенов)
PPTX
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
PDF
Индексируй неиндексирумое
PDF
Как размножается Sphinx
PDF
Sphinx. настройка, эксплуатация
PPT
эффективный полнотекстовый поиск по базам данных петр зайцев
PPTX
Поиск на своем сайте, обзор open source решений
PDF
Поиск? Sphinx!
PDF
Запуск клуба "Поисковые системы"
PPTX
Sphinx
Cфинкс и поиск терабайта
20120226 information retrieval raskovalov_lecture03-04
20111001 information retrieval raskovalov_lecture2
Про качественный поиск
Принципы работы поисковой системы
Принципы работы поисковой системы
Как устроен поиск / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)
Андрей Аксёнов, Sphinx Technologies Inc.
Про качественный поиск (Андрей Аксенов)
Поиск на своем сайте, обзор Open source решений (Алексей Рагозин)
Индексируй неиндексирумое
Как размножается Sphinx
Sphinx. настройка, эксплуатация
эффективный полнотекстовый поиск по базам данных петр зайцев
Поиск на своем сайте, обзор open source решений
Поиск? Sphinx!
Запуск клуба "Поисковые системы"
Sphinx
Ad

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

  • 2. КТО ЗДЕСЬ • Зовут Андрей, резидент HL, 3 клона ;) • Делал вебню, игры, поиск • Знаю много страшных слов • Вчера про “скорость” в целом • Сейчас про “поиск” в целом • Ничего нового, все украдено, explicit lyrics
  • 3. О чем речь • Не про Sphinx • Не про Lucene • Не про Yandex • Не про Google • Не про науку • Не про рынок • Обзор про технологию
  • 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! */ /* но есть нюанс… */
  • 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. Это все. А теперь…