Как устроен поиск
Post on 16-Dec-2014
674 Views
Preview:
DESCRIPTION
TRANSCRIPT
Как устроен поиск
Андрей Аксенов, 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
top related