А. Фирсов "Найти за одну секунду - 2", dump-2014
DESCRIPTION
TRANSCRIPT
Найти за одну секунду - 2
Антон Фирсов
Knoema
Что такое Нома?
Knoema.com – это веб-сайт, где можно найтиоткрытые данные на любую тему длялюбой страны мира из кучи разныхисточников
У нас собран самый большой репозиторийстатистических данных в мире и контента,
сделанного на их основе
2
Несколько метрик
Количество наборов данных – 3500+
Количество временных рядов – 250M+
Размер базы – 130Gb+
И все это растет десятками процентов вмесяц
3
Проблема
Навигация, рубрикатор, теги, темы – это всезамечательно, но ведь никто сейчас непользуется каталогами, а идут сразу на Google
и Yandex. Не так ли?
Нам нужен поиск!
4
Демо
5
Демо
6
Причины реализации собственного движка
Специфические данные:
структурированные, мало текста и многоцифр.
Необходимость собственного, сильноспецифического алгоритма ранжирования
– Алгоритм ранжирования в поиске – это одно изнаших ключевых ноу-хау
Специальные возможности
Работа на ограниченных ресурсах железа
Эффективное использование ресурсов
7
Хранение данных
Mexico – Oranges – Production Quantity
Mexico – Oranges – Area Harvested
Mexico – Oranges – Yield
Mexico – Apples – Production Quantity
Mexico – Apples – Area Harvested
Mexico – Apples – Yield
Portugal – Oranges – Production Quantity
…
Egypt – Oranges – Production Quantity
…
8
Страна С/X культуры Показатель
Egypt Apples Yield
Mexico Bananas Area harvested
Portugal Oranges Production quantity
United States of America Olives
Potatoes
Категория Категория
Терм
Ряд
Демо
9
Ключевые требования
СКОРОСТЬ, СКОРОСТЬ, СКОРОСТЬ
Учет различных словоформ
Исправление ошибок, возникающих принаборе
Эффективное использование ресурсов
10
Архитектура
11
Сервер приложений
База данных
Данные
Запрос Ответ
Поисковый сервер
Индекс
Снимоксостояния
Сервер приложений
Этапы выполнения поискового запроса
Разбивка на слова
Коррекция ошибок
Учет различных словоформ
Учет синонимов
Ранжирование результатов
12
Коррекция ошибок. Расстояние Левенштейна
Пример
13
В С С В С С
N O M A
K N O E M A
З З З З
Х Л Е Б
П И В О
Решение «в лоб»: перебрать все слова, имеющиеся вБД, выбрать то, рассояние от которого до слова иззапроса минимально.
Ассимптотическая сложность: k * n * m
k – количество слов в словаре
n – средняя длинна слова в словаре
m – длинна слова из запроса
C С С У С С
П Е Р Ь M Ь
П Е Р M Ь
Коррекция ошибок. Оптимизация
14
П
Й
Я
К Р А Й
ОГ
ИЬ К
.
ОСМ
Р
ЕУМ
. : 1.0ПЕРНЬ
Коррекция ошибок. Оптимизация
15
П
Й
Я
К Р А Й
ОГ
ИЬ К
.
ОСМ
Р
ЕУМ
П : 1.0ПЕРНЬ
К : 0.8ПЕРНЬ
Коррекция ошибок. Оптимизация
16
П
Й
Я
К Р А Й
ОГ
ИЬ К
.
ОСМ
Р
ЕУМ
ПЕ : 1.0ПЕРНЬ
К : 0.8ПЕРНЬ
Коррекция ошибок. Оптимизация
17
П
Й
Я
К Р А Й
ОГ
ИЬ К
.
ОСМ
Р
ЕУМ
ПЕР : 1.0ПЕРНЬ
К : 0.8ПЕРНЬ
Коррекция ошибок. Оптимизация
18
П
Й
Я
К Р А Й
ОГ
ИЬ К
.
ОСМ
Р
ЕУМ
ПЕРМ : 0.8ПЕРНЬ
К : 0.8ПЕРНЬ
Коррекция ошибок. Оптимизация
19
П
Й
Я
К Р А Й
ОГ
ИЬ К
.
ОСМ
Р
ЕУМ
ПЕРМ : 0.8ПЕРНЬ
КР : 0.6ПЕРНЬ
Коррекция ошибок. Оптимизация
20
П
Й
Я
К Р А Й
ОГ
ИЬ К
.
ОСМ
Р
ЕУМ
ПЕРМЬ : 0.8ПЕРНЬ
КР : 0.6ПЕРНЬ
Учет различных словоформ
Использование готового стеммера
Считать все слова с достаточно длиннымсовпадающим префиксом словоформамиодного и того же слова
Словоформы – как частный случай ошибокв написании слов
Аналогично п.3, но меньше снижатьрелевантность, если основа слова иокончание используются в других словах
21
Учет различных словоформ
Пермский край
Пермского края
Пермскому краю
Пермском крае
.....
Алтайский край
Алтайского края
Алтайскому краю
Алтайском крае
.....
Валовой внутренний продукт
Валового внутреннего продукта
Валовому внутреннему продукту
Валовом внутреннем продукте
22
Префикс Кол. Окончание Кол. Вес
П 8 ЕРМСКИЙ 1 8
ПЕ 4 РМСКИЙ 1 4
ПЕР 4 МСКИЙ 1 4
ПЕРМ 4 СКИЙ 2 8
ПЕРМС 4 КИЙ 2 8
ПЕРМСК 4 ИЙ 3 12
ПЕРМСКИ 1 Й 5 5
Получение результатов
23
Mexico
Egypt
States
United
Mexico
Egypt
United States
United States
of America
USA
Слова Термы
Harvested
Area
Oranges
Area harvested
Oranges
Mexico – Oranges – Area harvested
USA – Oranges – Area harvested
Результаты
United States of America
United States - GDP
Как эффективно использовать память в .net
Проблемы:
Минимизировать потребляемую память
Минимизировать время, затрачиваемое насборку мусора
Решение:
Использовать массивы из структур вместоколлекций из классов
Объединять массивы с малым количествомэлементов в большие массивы
24
Как эффективно использовать память в .net
25
8 байтsyncblock
8 байтТип
8 байтРазмер массива
8 байтСсылка на элемент массива
8 байтСсылка на элемент массива
8 байтСсылка на элемент массива
8 байтСсылка на элемент массива
8 байтsyncblock
8 байтТип
Данные
8 байтsyncblock
8 байтТип
элементов
8 байтРазмер массива
Элемент данных Элемент данных
Массив из структур
Массив объектов класса
Результаты
Реализован относительно быстрый поиск(~1-2 сек.) на слабом оборудовании,
потребляющий 13Гб памяти ипозволяющий исправлять ошибки внаписании слов и учитывать различныесловоформы в разных языках.
Архитектура поиска выстроена длядальнейшего горизонтальногомасштабирования
26