Как, используя Lucene, построить высоконагруженную систему поиска разнородных данных.

Презентация:



Advertisements
Похожие презентации
Поисковые движки. Sphinx Search Engine. Докладчик: Роман Кудлай
Advertisements

Как улучшить производительность проекта за три шага Шаромов Денис руководитель отдела техподдержки.
Скорость имеет значение Проблема медленных сайтов реальна Мациевский Николай, Web Optimizator 1 / 19 webo.in / webo.name.
1 просим любить и жаловать. 2 Что такое а так же.
Поиск на своем сайте, обзор open source решений Олег Бунин.
Эволюция архитектур систем статистики Максим Зотов, Герман Клименко. Компания LiveInternet.ru РИФ 2006, 22 марта.
Использование MySQL в сервисе дневников LiveInternet.ru Практика, практика, практика Гурьянов Андрей, программист Новиков Лев, системный администратор.
Презентация по: информатике Ученицы 8 а класса МКОУ «Линевская СШ» ЛЕМАЕВОЙ ЭЛЬВИРЫ Преподаватель: СУШКОВ АЛЕКСАНДР ИВАНОВИЧ.
Анализ данных Введение в информационный поиск. План оставшихся лекций 1.Введение в информационный поиск 2.Нормализация и извлечение информации из текста.
Статичный сайт Если тысяча пользователей запросит такую страницу у сервера, то они получат тысячу абсолютно одинаковых копий html-файла. Сайт, устроенный.
Разгони свой сайт Лекция 3: Кэширование Мациевский Николай 1 / 19 webo.in.
Разгони свой сайт Лекция 7: «Ненавязчивый» JavaScript Мациевский Николай 1 / 22 webo.in.
Тест по теме «Текстовый процессор MS Word» Для корректной работы с тестом проверьте следующие настройки - сервис параметры безопасность безопасность макросов.
Пример использования системы
Поиск информации в Научной электронной библиотеке периодических изданий НАН Украины Проскудина Г.Ю. Міжнародна наукова конференція «Формування і розвиток.
СУБД Access Запросы Автор: Тутыгин В.С.. Назначение запросов Запросы обеспечивают простой доступ к определенному подмножеству записей одной или нескольких.
Поисковое продвижение. День 1. О чем будем говорить Текстовые (внутренние) факторы Серверные факторы.
Экспертиза производительности Типовые ошибки разработчиков Шаромов Денис руководитель отдела техподдержки «1С-Битрикс»
1 © Хацкевич Александр Георгиевич Windows 7. 2 В предыдущих версиях операционных систем Windows управление файлами означало расположение файлов в различных.
Разгони свой сайт Лекция 8: Быстрый JavaScript Мациевский Николай 1 / 24 webo.in.
Транксрипт:

Как, используя Lucene, построить высоконагруженную систему поиска разнородных данных

Одноклассники в цифрах Что у нас есть: –100 млн пользователей; –3.3 млн групп; – млн пользователей онлайн; В секунду: –250. тыс. страниц, 50мс, 70Гбит/с; –6 тыс. сообщений и комментариев; –1.5 тыс. поисковых запросов. 1

Зачем нам понадобились свои поисковые системы? Пользователь не всегда знает, как именно регистрировался искомый друг На сайте были огромные каталоги групп и сообществ Планировались новые сервисы, которым понадобится поиск Как правило, человек ищет то, что уже есть у кого-то из его друзей 2

Почему Lucene? Поиск по MS SQL базе был крайне медленным На Java написано 99% нашего кода, поэтому Sphinx даже не смотрели Apachе Lucene/Solr поддерживаются большим сообществом и хорошо себя зарекомендовали Уже был опыт использования Solr Быстрый поиск других поисковых Java-проектов результатов не дал 3

Как устроен Lucene? 4 The brightbluebutterflyhangs onthe breeze Its best toforget thegreat skyand to retirefrom everywind Under bluesky, in brightsunlight,one neednot searcharound TermDocId blue1,2 bright1,2 butterfly1 breeze1 hangs1 need2 search2 sky2 TermDocId best1 forget1 great1 retire1 sky1 wind1 DocIdValues 1333, Author A 2777, Author C DocIdValues 1555, Author C Tokenizers & Filters & IndexWriter Index Reader & Searcher & Query parser

Требования к системе индексов 5 Отказоустойчивость и масштабируемость Высокая производительность поисковых серверов Гибкое индексирование Возможность сбора дополнительной информации перед индексацией Возможность анализа готового индекса

Что нас не устроило в Solr 6 Solr: – сервер использует только один процессор – репликация индексов на bash-скриптах – http - это дорого и медленно – сложно модифицировать Но Lucene нас устраивает, поэтому пишем свой сервер

Архитектура 7 Presentation Search processing system Event Indexer + DB Query Result Read Update/Notify Index Replication Query Results Services

Требования к поисковой системе 8 Отказоустойчивость Использование социального графа Эффективность Простое изменение и расширение функциональности Сбор статистики по пользователям Высокая пропускная способность

Как работает поисковая система 9 Get session for Schema Execute queries Reduce results Schedule queries Load results waitAll () waitFor (queries complete) waitAtLeast (result items) waitAll () waitFor (queries complete) waitAtLeast (result items)

Проблемы: работа с индексом 10 Lucene активно читает файлы во время поиска Пробовали: – Диск с FSDirectory и NIODirectory – RamDrive с FSDirectory и NIODirectory – Lucene RamDirectory – Собственный UnsafeDirectory Победил: – HeapDirectоry файлы как byte[] в хипе

Проблемы: ThreadLocal кэши 11 Долгий GC из-за уймы мелких объектов в хипе Причины: – Lucene использует ThreadLocal кэши для некоторых объектов – Jboss Remoting на каждое соединение содает поток, а их тысячи Первое решение: – Пул для выполнения запросов Второе решение: – Делая другую оптимизацию, убрали эти кэши

Проблемы: медленные хранимые поля 12 Медленная работа с хранимыми полями Причина: – При считывании хранимого поля создается много мусора и производятся ненужные операции Решение: – Считывать значение в нужный тип сразу из byte[] Результат: – На порядок быстрее стали операции с хранимыми полями – Время GC упало в 2 раза

Распознавание полей Поиск пользователей идет по следующим полям: имя и фамилия, город, страна, интервал возростов Друга можно искать, вводя известные данные: «илья широков 30» «илья широков москва» «илья широков россия» 13 Term Collector Term Collector User Index User Index Term Dict. Term Dict. Search System Query Line Fields Query

Поиск по возрасту Стандартные решения: – Добавление всех подходящих терминов – Префиксные термины для снижения количества терминов в запросе – Запрос к FieldCache – Фильтр результатов Наше решение: – Возраст хранится ввиде даты: yyyymmdd – Запрос по текстовым полям оборачивается в фильтрующий запрос, который проверяет отбраные документы по хранимому полю 14

Поиск музыки В базе есть: – артисты; альбомы; композиции – не сортированые музыкальные композиции Три точности совпадения: точное; все слова из запроса; некоторые слова из запроса Поиск всегда идет по всем видам документов От точности совпадения зависит поведение UI На место в выдаче влияет рейтинг документа С индекса собираются всевозможные топы 15

Индексация музыки Все храним в одном индексе У каждого документа: – в id зашит его тип (артист; альбом; композиция; файл) – тип как отдельное поле – рейтинг как параметр индексации – рейтинг как хранимое поле Текстовые поля: – по отдельности – необходимые комбинации – 2 представления текста: оригинал + фонетика 16

Поиск музыки Пробовали: – Отдельный запросы для каждого типа – Повторные запросы с меньшей точностью – Настройка оценщика веса для результата Решение: – Запрос состоит из комбинаций: точность + поле данных – Для каждой комбинации есть интервал значений весов – Вес из подзапроса нормализуется в интервал комбинации – Если документ отвечает запросу, сразу вычисляем его тип и добавляем в соответствующий коллектор 17

Поисковые сервера 18 8 серверов МБ 20 мс 1100 з/c 8 серверов МБ 20 мс 1100 з/c 2 сервера 600 МБ 3 мс 2200 з/c 2 сервера 600 МБ 3 мс 2200 з/c 6 серверов 400 МБ 7 мс 30 з/c 6 серверов 400 МБ 7 мс 30 з/c 4 сервера 2700 МБ 50 мс 200 з/c 4 сервера 2700 МБ 50 мс 200 з/c 5 серверов МБ 90 мс 1500 з/c 5 серверов МБ 90 мс 1500 з/c Поисковая система Поисковая система Пользователи Музыка Группы Сообщества Группы Сообщества Видео

Спасибо! Алексей Шевчук odnoklassniki.ru/aleksey.shevchuk Разработчик поисковых систем Одноклассники