3. Важные параметры:
Скорость индексирования(в том числе realtime)
Способы взаимодействия(API, REST, etc.)
Работа с языками, стемминг, нечеткие запросы
Дополнительные типы полей в
документах(numeric, geo, source, etc.)
Платформа и язык
Встроенные механизмы ранжирования и сортировки
7. Шардинг и репликация.
Добавляем еще одну ноду.
Нода 1 Нода 2
Репликация
Street1 Street1
Street2 Street2
8. Шардинг и репликация.
Добавляем еще 2 ноды.
Нода 1 Нода 2 Нода 3 Нода 4
Street1 Street1
Street2 Street2
9. Почему мы выбрали Elasticsearch?
Отличная поддержка шардинга и репликации на лету
Написан на Java и базируется на известном движке
Lucene
Near-realtime индексация.
13. Почему мы выбрали Elasticsearch?
Отличная поддержка шардинга и репликации на лету
Написан на Java и базируется на известном движке
Lucene
Near-realtime индексация.
Есть всё что нам нужно
Opensource, ASL v2
Имеется возможность для расширения
14. Возможность для расширения
River-плагины(поток данных из другого источника)
CouchDB RabbitMQ MongoDB …
Анализаторы
Русская морфология Hunspell(орфография)
Transport(расширения протоколов взаимодействия)
Memcached ZeroMQ Servlet …
Site Plugins(чаще всего UI для управления кластером)
Scripting Plugins(ЯП для скриптов)
28. Soundex
• Первая буква сохраняется
• В остальной части слова:
• Буквы, обозначающие, как правило,
гласные звуки: a, e, h, i, o, u, w и y — отбрасываются
• Оставшиеся буквы (согласные) заменяются на цифры от 1 до 6,
причём похожим по звучанию буквам соответствуют одинаковые цифры:
• 1: b, f, p, v
• 2: c, g, j, k, q, s, x, z
• 3: d, t
• 4: l
• 5: m, n
• 6: r
• Любая последовательность одинаковых цифр сокращается до одной такой цифры.
• Итоговая строка обрезается до первых четырёх символов.
Если длина строки меньше требуемой, недостающие символы заменяются знаком 0.
Примеры:
аmmonium → ammnm → a5555 → a5 → a500
implementation → implmnttn → i51455335 → i514535 → i514
31. Fuzzy запросы(нечеткие)
Расстояние Левенштейна - минимальное количество операций
вставки одного символа, удаления одного символа и замены
одного символа на другой, необходимых для превращения
одной строки в другую.
Жукава
1 Жукова
Лизной (проезд)
2 Лесной (проезд)
Бухольца
1 Бухгольца
32. Это важно!
В большинстве случаев вы должны использовать для поиска
тот же алгоритм анализа, что и при индексировании!
Fuzzy Query Soundex
«жукава» «a500»
Fuzzy Query 3gramm
«жукава» «жук ука кав ава»
43. Percolation
Индексируются запросы, а не документы!
Тем не менее это обычный индекс
Запросы распространяются на все реплики
Поддерживают все обычные запросы и фильтры
45. Здарова! Зацени чо творится
"doc" : { «Одесский террорист, "метивший
"message" : "..." в Путина",
заявил о милицейских пытках
} наркотиками и пакетами».
GET “http://localhost:9200/messages/type/_percolate”
{"ok":true, "matches":["kgb"]}
46. Facets
Агрегированная информация по запросу
Статистическая информация
Сумма, минимальноемаксимальное значение, среднее и т.д.
Гистограммы(включая гистрограмму по дате)
Географический facet