Top Banner
Как устроен поиск Андрей Аксенов, Sphinx
35

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

Dec 16, 2014

Download

Technology

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Как устроен поиск

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

Андрей Аксенов, Sphinx

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

КТО ЗДЕСЬ

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

• Вчера про “скорость” в целом• Сейчас про “поиск” в целом• Ничего нового, все украдено, explicit lyrics

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

О чем речь

• Не про Sphinx• Не про Lucene• Не про Yandex• Не про Google• Не про науку• Не про рынок• Обзор про технологию

Page 4: Как устроен поиск
Page 5: Как устроен поиск

О чем речь 2.0

• Не про библиотеки бумажных книг• Не про уголовный розыск• Не про поиск отпечатков пальцев• Не про скоростной выбор парных носков• Не про поиск по картинкам• Не про идентификацию песен и видео• Про старый добрый тупой поиск по тексту

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

“Часть” 0Как оно в целом

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

4 условные стадии

• Сбор данных– Например, web crawling, сканирование, итп– Пропустим для ясности!!!

• Индексация• Поиск• Масштабирование– Агрегация, репликация, HA, LB, итп

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

Часть 1Индексация

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

Как устроена индексация

• Экстракция текста– PDF, HTML, … -> текст

• Токенизация– Разваливаем текст на токены

• Морфологическая обработка– Стемминг либо лемматизация, POS, WSD, …

• Создание инвертированного индекса

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

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

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

“Движок” за 15 минут

CREATE TABLE mysearchindex (keyword VARCHAR(255) NOT

NULL,docid INTEGER NOT NULL,UNIQUE(keyword, docid) );

/* а можно даже в MS Word! *//* но есть нюанс… */

Page 12: Как устроен поиск
Page 13: Как устроен поиск
Page 14: Как устроен поиск

Чем слегка уступает наш “движок”?

• [+] Ключевые слова ведь найдены!!!• [-] Эффективность?• Память? Диск? Процессор

• [-] Ранжирование?• [-] Сортировка?• [-] Морфология?• [-] Семантика?

• Не, не слышал

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

Чуть подробнее про индекс

• Словарь + списки документов

• Абыр => [ 123 ]• Валг => [ 123 ]• Васечкин => [ 7, 40, 42, 1917, 2012, … ]• Вася => [ 3, 15, 40, 2012, … ]• Петров => [ 2, 3, 5, 8, 13, … ]• Петя => [ 2, 4, 8, 16, … ]

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

Чуть подробнее про индекс

• Словарь + списки документов + позиций

• Абыр => [ <123, {10,20,30…}> ]• Валг => [ <123, {7,21,47…} ]• …

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

Про эффективность

• Keyword + docid в базе = ?– Все (!) копии слов по много (!) раз– 4-8 байт на docid– 4 байта на позицию– Умножить на 2 с небольшим для индекса

• Итого = несколько раз от размера текста• Особенно если с позициями итп POS

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

Как быть!

• Сортировка и сжатие!

• Абыр => [ 123 ]• Валг => [ 123 ]• Васечкин => [ 7, 40, 42, 1917, 2012, … ]• Вася => [ 3, 15, 40, 2012, … ]• Петров => [ 2, 3, 5, 8, 13, … ]• Петя => [ 2, 4, 8, 16, … ]

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

Дельты

• Васечкин => [ 7, 40, 42, 1917, 2012, … ]– vs

• Васечкин => [ 7, 33, 2, 1875, 95, … ]• Ммм, а толку?

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

Дельты суем в какой-нибудь код

• Битовый– Хаффман, Элиас, Голомб, арифметика, итп

• Байтовый– Varint

• Блочный– Group Varint, S9, S16, PFD

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

Дельты суем в какой-нибудь код

• Битовый– Хаффман, Элиас, Голомб, арифметика, итп

• Байтовый– Varint

• Блочный– Group Varint, S9, S16, PFD

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

“Наглядный” “скриншот”

• Varint– 1 0001001– 1 1001101– 0 0010110

• Group Varint– Первый байт: 00 01 11 00 = длины (1, 2, 4, 2)– Далее: собственно данные

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

И еще куча фарша поверх…

• POS, морфология, итд итп• “Ставь точку” ;)

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

Часть 2Поиск

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

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

• Matching = найти• Ranking = отранжировать

• Разные требования– Ad-hoc веб поиск– Химера “поиска на естественном языке”– Data mining, поиск по юридическим текстам– Поиск на разных (!) языках

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

Matching

• Простая часть!!!• По тексту – и не по текст– … WHERE MATCH(‘new ways to think’)– AND year BETWEEN 1950 AND 1970

• По тексту – операции над списками• Где нет – либо тоже, либо по атрибутам• Похоже на базу – но таки иначе– Early termination, эффективный UNION/MINUS,

etc

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

Ranking

• Сложная часть• Проблема в общем формально нерешаемая• Но практически таки да ;)

• Человеческие оценки• Без них, увы, никуда

• Метрики качества• P, R, AP, MAP, NDCG, Bpref, ERR…)

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

Например, precision

• Запрос Sphinx• Стоит в египте статуя Сфинкса …• Sphinx Guns | Buy Online | Free Shipping!• Задокументируй одноглазую змею | Sphinx

(url = http://sphinx.blablabla.com)• А что вы знаете о бабочках-Сфинксах?

• Процент попаданий = precision• Увы, не учитывается порядок

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

Например, average precision

• Давайте учтем порядок!• Pos 1 = weight 0.5• Pos 2 = weight 0.25• Pos 3 = weight 0.125• …• NB: ЭТИ ВЕСА АБСОЛЮТНО НЕВЕРНЫ

• Давайте усредним кучу запросов!• И вот… ЦЕЛЬ!

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

Ranking

• Сигналы• Текстовые, внетекстовые• Статические, динамические

• Простые формулы• TF*IDF• BM25 = BM25 ( TF, IDF, DocLength )

• Сложные формулы и машинное обучение

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

Часть 3Масштабирование

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

Слайда нет

• Извините, 10 утра

• Google = ~1,000,000 машин• Yandex = ~10,000 машин• Craigslist = ~30 машин• Мой хомячок = ~0.1 машины

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

Это все. А теперь…

Page 34: Как устроен поиск
Page 35: Как устроен поиск

Вопросы?

[email protected]