Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Как устроен поискАндрей Аксенов, Sphinx
КТО ЗДЕСЬ• Зовут Андрей, резидент HL, 3 клона ;)• Делал вебню, игры, поиск• Знаю много страшных слов• Вчера про “скорость”...
О чем речь•   Не про Sphinx•   Не про Lucene•   Не про Yandex•   Не про Google•   Не про науку•   Не про рынок•   Обзор пр...
О чем речь 2.0•   Не про библиотеки бумажных книг•   Не про уголовный розыск•   Не про поиск отпечатков пальцев•   Не про ...
“Часть” 0Как оно в целом
4 условные стадии• Сбор данных  – Например, web crawling, сканирование, итп  – Пропустим для ясности!!!• Индексация• Поиск...
Часть 1Индексация
Как устроена индексация• Экстракция текста  – PDF, HTML, … -> текст• Токенизация  – Разваливаем текст на токены• Морфологи...
Как устроен индекс
“Движок” за 15 минутCREATE TABLE mysearchindex (     keyword VARCHAR(255) NOT NULL,     docid INTEGER NOT NULL,     UNIQUE...
Чем слегка уступает наш “движок”?• [+] Ключевые слова ведь найдены!!!• [-] Эффективность?    • Память? Диск? Процессор•   ...
Чуть подробнее про индекс• Словарь + списки документов•   Абыр       => [ 123 ]•   Валг       => [ 123 ]•   Васечкин   => ...
Чуть подробнее про индекс• Словарь + списки документов + позиций• Абыр        => [ <123, {10,20,30…}> ]• Валг        => [ ...
Про эффективность• Keyword + docid в базе = ?  – Все (!) копии слов по много (!) раз  – 4-8 байт на docid  – 4 байта на по...
Как быть!• Сортировка и сжатие!•   Абыр       => [ 123 ]•   Валг       => [ 123 ]•   Васечкин   => * 7, 40, 42, 1917, 2012...
Дельты• Васечкин      => * 7, 40, 42, 1917, 2012, … +  – vs• Васечкин    => [ 7, 33, 2, 1875, 95, … +• Ммм, а толку?
Дельты суем в какой-нибудь код• Битовый  – Хаффман, Элиас, Голомб, арифметика, итп• Байтовый  – Varint• Блочный  – Group V...
Дельты суем в какой-нибудь код• Битовый  – Хаффман, Элиас, Голомб, арифметика, итп• Байтовый  – Varint• Блочный  – Group V...
“Наглядный” “скриншот”• Varint  – 1 0001001  – 1 1001101  – 0 0010110• Group Varint  – Первый байт: 00 01 11 00 = длины (1...
И еще куча фарша поверх…• POS, морфология, итд итп• “Ставь точку” ;)
Часть 2Поиск
Как устроен запрос• Matching = найти• Ranking = отранжировать• Разные требования  – Ad-hoc веб поиск  – Химера “поиска на ...
Matching• Простая часть!!!• По тексту – и не по текст  – … WHERE MATCH(‘new ways to think’)  – AND year BETWEEN 1950 AND 1...
Ranking• Сложная часть• Проблема в общем формально нерешаемая• Но практически таки да ;)• Человеческие оценки  • Без них, ...
Например, precision• Запрос Sphinx  • Стоит в египте статуя Сфинкса …  • Sphinx Guns | Buy Online | Free Shipping!  • Задо...
Например, average precision• Давайте учтем порядок!  •   Pos 1 = weight 0.5  •   Pos 2 = weight 0.25  •   Pos 3 = weight 0...
Ranking• Сигналы • Текстовые, внетекстовые • Статические, динамические• Простые формулы • TF*IDF • BM25 = BM25 ( TF, IDF, ...
Часть 3Масштабирование
Слайда нет • Извините, 10 утра •   Google      = ~1,000,000 машин•   Yandex      =    ~10,000 машин•   Craigslist  =    ...
Это все. А теперь…
Вопросы?shodan@sphinxsearch.com
Как устроен поиск (Андрей Аксёнов)
Как устроен поиск (Андрей Аксёнов)
Как устроен поиск (Андрей Аксёнов)
Как устроен поиск (Андрей Аксёнов)
Upcoming SlideShare
Loading in …5
×

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

3,342 views

Published on

  • Be the first to comment

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

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

×