Найти за одну секунду - 2
Антон Фирсов
Knoema
Что такое Нома?
 Knoema.com – это веб-сайт, где можно найти
открытые данные на любую тему для
любой страны мира из кучи р...
Несколько метрик
 Количество наборов данных – 3500+
 Количество временных рядов – 250M+
 Размер базы – 130Gb+
 И все э...
Проблема
Навигация, рубрикатор, теги, темы – это все
замечательно, но ведь никто сейчас не
пользуется каталогами, а идут с...
Демо
5
Демо
6
Причины реализации собственного движка
 Специфические данные:
структурированные, мало текста и много
цифр.
 Необходимост...
Хранение данных
Mexico – Oranges – Production Quantity
Mexico – Oranges – Area Harvested
Mexico – Oranges – Yield
Mexico –...
Демо
9
Ключевые требования
 СКОРОСТЬ, СКОРОСТЬ, СКОРОСТЬ
 Учет различных словоформ
 Исправление ошибок, возникающих при
наборе...
Архитектура
11
Сервер
приложений
База данных
Данные
Запрос Ответ
Поисковый
сервер
Индекс
Снимок
состояния
Сервер
приложений
Этапы выполнения поискового запроса
 Разбивка на слова
 Коррекция ошибок
 Учет различных словоформ
 Учет синонимов
 Р...
Коррекция ошибок. Расстояние Левенштейна
Пример
13
В С С В С С
N O M A
K N O E M A
З З З З
Х Л Е Б
П И В О
Решение «в лоб»...
Коррекция ошибок. Оптимизация
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
ПЕРНЬ
Учет различных словоформ
 Использование готового стеммера
 Считать все слова с достаточно длинным
совпадающим префиксом ...
Учет различных словоформ
 Пермский край
 Пермского края
 Пермскому краю
 Пермском крае
 .....
 Алтайский край
 Алта...
Получение результатов
23
Mexico
Egypt
States
United
Mexico
Egypt
United
States
United
States
of
America
USA
Слова Термы
Ha...
Как эффективно использовать память в .net
Проблемы:
 Минимизировать потребляемую память
 Минимизировать время, затрачива...
Как эффективно использовать память в .net
25
8 байт
syncblock
8 байт
Тип
8 байт
Размер
массива
8 байт
Ссылка на
элемент
ма...
Результаты
 Реализован относительно быстрый поиск
(~1-2 сек.) на слабом оборудовании,
потребляющий 13Гб памяти и
позволяю...
Спасибо за внимание!
Вопросики?
http://knoema.com
27
Upcoming SlideShare
Loading in …5
×

А. Фирсов "Найти за одну секунду - 2", DUMP-2014

635 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
635
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

А. Фирсов "Найти за одну секунду - 2", DUMP-2014

  1. 1. Найти за одну секунду - 2 Антон Фирсов Knoema
  2. 2. Что такое Нома?  Knoema.com – это веб-сайт, где можно найти открытые данные на любую тему для любой страны мира из кучи разных источников  У нас собран самый большой репозиторий статистических данных в мире и контента, сделанного на их основе 2
  3. 3. Несколько метрик  Количество наборов данных – 3500+  Количество временных рядов – 250M+  Размер базы – 130Gb+  И все это растет десятками процентов в месяц 3
  4. 4. Проблема Навигация, рубрикатор, теги, темы – это все замечательно, но ведь никто сейчас не пользуется каталогами, а идут сразу на Google и Yandex. Не так ли? Нам нужен поиск! 4
  5. 5. Демо 5
  6. 6. Демо 6
  7. 7. Причины реализации собственного движка  Специфические данные: структурированные, мало текста и много цифр.  Необходимость собственного, сильно специфического алгоритма ранжирования – Алгоритм ранжирования в поиске – это одно из наших ключевых ноу-хау  Специальные возможности  Работа на ограниченных ресурсах железа  Эффективное использование ресурсов 7
  8. 8. Хранение данных 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. 9. Демо 9
  10. 10. Ключевые требования  СКОРОСТЬ, СКОРОСТЬ, СКОРОСТЬ  Учет различных словоформ  Исправление ошибок, возникающих при наборе  Эффективное использование ресурсов 10
  11. 11. Архитектура 11 Сервер приложений База данных Данные Запрос Ответ Поисковый сервер Индекс Снимок состояния Сервер приложений
  12. 12. Этапы выполнения поискового запроса  Разбивка на слова  Коррекция ошибок  Учет различных словоформ  Учет синонимов  Ранжирование результатов 12
  13. 13. Коррекция ошибок. Расстояние Левенштейна Пример 13 В С С В С С N O M A K N O E M A З З З З Х Л Е Б П И В О Решение «в лоб»: перебрать все слова, имеющиеся в БД, выбрать то, рассояние от которого до слова из запроса минимально. Ассимптотическая сложность: k * n * m k – количество слов в словаре n – средняя длинна слова в словаре m – длинна слова из запроса C С С У С С П Е Р Ь M Ь П Е Р M Ь
  14. 14. Коррекция ошибок. Оптимизация 14 П Й Я К Р А Й ОГ ИЬ К . ОС М Р Е УМ . : 1.0 ПЕРНЬ
  15. 15. Коррекция ошибок. Оптимизация 15 П Й Я К Р А Й ОГ ИЬ К . ОС М Р Е УМ П : 1.0 ПЕРНЬ К : 0.8 ПЕРНЬ
  16. 16. Коррекция ошибок. Оптимизация 16 П Й Я К Р А Й ОГ ИЬ К . ОС М Р Е УМ ПЕ : 1.0 ПЕРНЬ К : 0.8 ПЕРНЬ
  17. 17. Коррекция ошибок. Оптимизация 17 П Й Я К Р А Й ОГ ИЬ К . ОС М Р Е УМ ПЕР : 1.0 ПЕРНЬ К : 0.8 ПЕРНЬ
  18. 18. Коррекция ошибок. Оптимизация 18 П Й Я К Р А Й ОГ ИЬ К . ОС М Р Е УМ ПЕРМ : 0.8 ПЕРНЬ К : 0.8 ПЕРНЬ
  19. 19. Коррекция ошибок. Оптимизация 19 П Й Я К Р А Й ОГ ИЬ К . ОС М Р Е УМ ПЕРМ : 0.8 ПЕРНЬ КР : 0.6 ПЕРНЬ
  20. 20. Коррекция ошибок. Оптимизация 20 П Й Я К Р А Й ОГ ИЬ К . ОС М Р Е УМ ПЕРМЬ : 0.8 ПЕРНЬ КР : 0.6 ПЕРНЬ
  21. 21. Учет различных словоформ  Использование готового стеммера  Считать все слова с достаточно длинным совпадающим префиксом словоформами одного и того же слова  Словоформы – как частный случай ошибок в написании слов  Аналогично п.3, но меньше снижать релевантность, если основа слова и окончание используются в других словах 21
  22. 22. Учет различных словоформ  Пермский край  Пермского края  Пермскому краю  Пермском крае  .....  Алтайский край  Алтайского края  Алтайскому краю  Алтайском крае  .....  Валовой внутренний продукт  Валового внутреннего продукта  Валовому внутреннему продукту  Валовом внутреннем продукте 22 Префикс Кол. Окончание Кол. Вес П 8 ЕРМСКИЙ 1 8 ПЕ 4 РМСКИЙ 1 4 ПЕР 4 МСКИЙ 1 4 ПЕРМ 4 СКИЙ 2 8 ПЕРМС 4 КИЙ 2 8 ПЕРМСК 4 ИЙ 3 12 ПЕРМСКИ 1 Й 5 5
  23. 23. Получение результатов 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
  24. 24. Как эффективно использовать память в .net Проблемы:  Минимизировать потребляемую память  Минимизировать время, затрачиваемое на сборку мусора Решение:  Использовать массивы из структур вместо коллекций из классов  Объединять массивы с малым количеством элементов в большие массивы 24
  25. 25. Как эффективно использовать память в .net 25 8 байт syncblock 8 байт Тип 8 байт Размер массива 8 байт Ссылка на элемент массива 8 байт Ссылка на элемент массива 8 байт Ссылка на элемент массива 8 байт Ссылка на элемент массива 8 байт syncblock 8 байт Тип Данные 8 байт syncblock 8 байт Тип элементов 8 байт Размер массива Элемент данных Элемент данных Массив из структур Массив объектов класса
  26. 26. Результаты  Реализован относительно быстрый поиск (~1-2 сек.) на слабом оборудовании, потребляющий 13Гб памяти и позволяющий исправлять ошибки в написании слов и учитывать различные словоформы в разных языках.  Архитектура поиска выстроена для дальнейшего горизонтального масштабирования 26
  27. 27. Спасибо за внимание! Вопросики? http://knoema.com 27

×