• Like
Индексируй неиндексирумое
Upcoming SlideShare
Loading in...5
×

Индексируй неиндексирумое

  • 1,046 views
Uploaded on

В данном выступлении будет рассказно об общих принципах организации систем полнотекстового поиска на примере движка Sphinx. Будут рассмотрены структура и организация поискового индекса, на примере …

В данном выступлении будет рассказно об общих принципах организации систем полнотекстового поиска на примере движка Sphinx. Будут рассмотрены структура и организация поискового индекса, на примере разобраны различные механимзы индексирования. Речь пойдет также и о продвинутых методиках работы со Sphinx: индексы реального времени, атрибуты с несколькими значениями, дельта-индексирование. Все это будет не только описано но и продемонстрировано, а желающие смогут проделывать все операции у себя на ноутбуках параллельно с докладчиком (см. описание программных требований).

Вторая часть будет посвящена непосредственно поиску и взаимодействию с движком Sphinx из программного кода на языке C#. Будут использованы механизмы обращения к Sphinx как используя нативный протокол, так и через MySQL-адаптер. Будет показано применение библиотек Sphinx.Client, Scarab и ByndyuSoft.Infrastructure.Sphinx, две из которых созданы автором мастер-класса. Также будут рассмотрены типовые ситуации использования Sphinx и шаблоны организации поиска.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,046
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
19
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Индексируй неиндексирумоеРахматиллаев ТимурByndyuSofttwitter.com/eskat0n6-я конференция .NET разработчиков28 апреля 2013www.dotnetconf.ru
  • 2. 2Индексируй неиндексируемое, Рахматиллаев ТимурРазминка1. Скачать материалы поссылке:http://bit.ly/dotnetconf6-sphinx2. Проверить наличиеустановленной Visual Studio2010+3. Установить ReSharper 7.х(настоятельнорекомендуется, но необязательно)
  • 3. 3Индексируй неиндексируемое, Рахматиллаев ТимурОжидания от мастер-класса
  • 4. 4Индексируй неиндексируемое, Рахматиллаев ТимурНемного философии
  • 5. 5Индексируй неиндексируемое, Рахматиллаев ТимурВ начале была проблемаОрганизовать быстрый и лексическиймногокритериальный поиск средиданных, хранящихся в СУБД (в общемслучае – любом произвольномхранилище)
  • 6. 6Индексируй неиндексируемое, Рахматиллаев ТимурНо зачем, ведь есть…Стандартные средства поиска• Для реляционных СУБД• SQL-запросы с WHERE-условиями, операторыLIKE, IN и BETWEEN• Полнотекстовые движки, встроенные в СУБД– MySQL Fulltext– PostgreSQL Textsearch– MS SQL Fulltext Filter Daemon• Для NoSQL СУБД• Собственные механизмы поиска на основе языказапросов и (как правило) встроенногоиндексирующего движка
  • 7. 7Индексируй неиндексируемое, Рахматиллаев ТимурНедостатки «родных» решенийна основе хранилища данных1. Зависимость логики работы поиска отконтейнера хранения данных2. Низкая функциональность с точкизрения поддержки сложных условий впоисковом запросе3. Низкая скорость работы4. Слабое лексическое обеспечение
  • 8. 8Индексируй неиндексируемое, Рахматиллаев Тимур«Родные» решения1. Просты и быстры в освоении2. Идеальны для систем с низкимитребования ко времени отклика припоиске3. Хороши для систем с малым объемомданных4. Не усложняют инфраструктуру и неувеличивают сложность поддержкисистемы (см. п.2 и п.3)
  • 9. 9Индексируй неиндексируемое, Рахматиллаев ТимурВсе хорошо, пока у вас…
  • 10. 10Индексируй неиндексируемое, Рахматиллаев ТимурИспользуйте то, что проще
  • 11. 11Индексируй неиндексируемое, Рахматиллаев ТимурНо что, если…Иголка
  • 12. 12Индексируй неиндексируемое, Рахматиллаев Тимур<картинка_для_шутки_юмора>
  • 13. 13Индексируй неиндексируемое, Рахматиллаев ТимурСложные формы поиска
  • 14. 14Индексируй неиндексируемое, Рахматиллаев ТимурМного данных
  • 15. 15Индексируй неиндексируемое, Рахматиллаев ТимурТребуется быстрый поиск
  • 16. 16Индексируй неиндексируемое, Рахматиллаев ТимурМеханизмы полнотекстовогопоиска• Движки («чистые»)• Xapian• CLucene• Интегрированные• MySQL Fulltext• PostgreSQL Textsearch• MS SQL Fulltext Filter Daemon• Сервера• Sphinx• Apache Solr (Lucene)
  • 17. 17Индексируй неиндексируемое, Рахматиллаев ТимурМеханизмы полнотекстовогопоиска• Движки («чистые»)• Xapian• CLucene• Интегрированные• MySQL Fulltext• PostgreSQL Textsearch• MS SQL Fulltext Filter Daemon• Сервера• Sphinx• Apache Solr (Lucene)
  • 18. 18Индексируй неиндексируемое, Рахматиллаев ТимурМеханизмы полнотекстовогопоиска• Движки («чистые»)• Xapian• CLucene• Интегрированные• MySQL Fulltext• PostgreSQL Textsearch• MS SQL Fulltext Filter Daemon• Сервера• Sphinx• Apache Solr (Lucene)
  • 19. 19Индексируй неиндексируемое, Рахматиллаев Тимур«Чистые» движки поиска1. Библиотеки с программнымибиндингами под различные языки(C++, Java, C#...)2. Высокие возможности дляконфигурирования3. Присутствуют интересныефункциональные особенности4. Удобны для использования в desktop-приложениях
  • 20. 20Индексируй неиндексируемое, Рахматиллаев ТимурМеханизмы полнотекстовогопоиска• Движки («чистые»)• Xapian• CLucene• Интегрированные• MySQL Fulltext• PostgreSQL Textsearch• MS SQL Fulltext Filter Daemon• Сервера• Sphinx• Apache Solr (Lucene)
  • 21. 21Индексируй неиндексируемое, Рахматиллаев ТимурДостоинства1. Привычная архитектура клиент-сервер2. Удобство развертывания и интеграции3. Простота взаимодействия4. Возможность линейногоколичественного повышенияпроизводительности
  • 22. 22Индексируй неиндексируемое, Рахматиллаев ТимурПринцип работы сервераполнотекстового поискаСетьДвижок поискаВеб-серверИндекс документов• HTTP (JSON, XML)• Проприетарный протокол• Мимикрия под SQL СУБД(набор файлов)
  • 23. 23Индексируй неиндексируемое, Рахматиллаев ТимурApache Solr• Движок поиска – Lucene• Интерфейс к движку выполнен в видеJava-сервлета, запускаемого вконтейнере Apache Tomcat• Взаимодействие через XML/JSON/CSV-протокол• Встроенные средства графическогоадминистрирования• Огромная расширяемость
  • 24. 24Индексируй неиндексируемое, Рахматиллаев ТимурSphinx• Собственный движок поиска• Выполнен в виде консольногоприложения и умеет возможностьустановки в виде Windows-сервиса илидемона• Взаимодействие по собственномупротоколу или по протоколуMySQL/PostgreSQL
  • 25. 25Индексируй неиндексируемое, Рахматиллаев ТимурПринцип работы сервераполнотекстового поискаСетьДвижок поискаВеб-серверИндекс документов
  • 26. 26Индексируй неиндексируемое, Рахматиллаев ТимурИндекс документов• Структура данных, обеспечивающаяпоиск по набору записей по заданнымкритериям• Единичная запись в индексе –документ• Документ имеет уникальныйидентификатор• Основная задача поиска в индексе –получение набора идентификаторовнайденных документов
  • 27. 27Индексируй неиндексируемое, Рахматиллаев ТимурТипы индексов• Инвертированный• Каждому слову из множестваслов, являющихся объединениеммножеств слов каждого документасопоставляется набор документов, вкоторых оно встречается• Прямой• Каждому документу сопоставляется наборслов, которые он содержит
  • 28. 28Индексируй неиндексируемое, Рахматиллаев ТимурТипы индексов• Инвертированный• Каждому слову из множестваслов, являющихся объединениеммножеств слов каждого документасопоставляется набор документов, вкоторых оно встречается• Прямой• Каждому документу сопоставляется наборслов, которые он содержит
  • 29. 29Индексируй неиндексируемое, Рахматиллаев ТимурИнвертированный индексСлово1 Слово2 Слово3 Слово4Документ1Документ2Документ3Документ2Документ3Документ1 Документ1Документ3
  • 30. 30Индексируй неиндексируемое, Рахматиллаев ТимурИнвертированный индексСлово1 Слово2 Слово3 Слово4Документ1Документ2Документ3Документ2Документ3Документ1 Документ1Документ3
  • 31. 31Индексируй неиндексируемое, Рахматиллаев ТимурИнвертированный индексСлово1 Слово2 Слово3 Слово4Документ1Документ2Документ3Документ2Документ3Документ1 Документ1Документ3
  • 32. 32Индексируй неиндексируемое, Рахматиллаев ТимурИнвертированный индексСлово1 Слово2 Слово3 Слово4Документ1Документ2Документ3Документ2Документ3Документ1 Документ1Документ3
  • 33. 33Индексируй неиндексируемое, Рахматиллаев ТимурСтемминг• Процесс получения инфинитива словапо его производной форме• Утилита (библиотека) производящаястемминг называется «стеммер»• Индексируются начальные формы слов• Возможна индексация точных формслов (без стемминга, крайнеувеличивает размер индекса)
  • 34. 34Индексируй неиндексируемое, Рахматиллаев ТимурТипы индексов• Префиксный• Позволяет искать слова, начинающиеся назаданное• чело* -> человек• Инфиксный• Позволяет искать слова, оканчивающиесяна заданное• *век -> человек
  • 35. 35Индексируй неиндексируемое, Рахматиллаев ТимурТипы индексов• Префиксный• Позволяет искать слова, начинающиесяна заданное• Инфиксный• Позволяет искать слова, оканчивающиесяна заданное
  • 36. 36Индексируй неиндексируемое, Рахматиллаев ТимурЛогическая структураиндексаИдентификатордокументаПоля Атрибуты1 Поля документа 1 Атрибуты документа 12 Поля документа 2 Атрибуты документа 23 Поля документа 3 Атрибуты документа 3… … …
  • 37. 37Индексируй неиндексируемое, Рахматиллаев ТимурПоля в документе• Не хранят данных• Предназначены для организациипоиска по текстовым/числовым данным
  • 38. 38Индексируй неиндексируемое, Рахматиллаев ТимурАтрибуты документа• Предназначены для хранения данных ипоиска по ним• Как правило, поддерживают числовыеи строковые типы данных• Представляют собой любыеданные, ассоциированные сдокументов
  • 39. 39Индексируй неиндексируемое, Рахматиллаев ТимурMulti-valued attributes• Атрибуты, которые представляют собойнеупорядочные наборы однотипныхзначений, ассоциированные сдокументов• Крайне удобны для индексированияреляционной структуры данных
  • 40. 40Индексируй неиндексируемое, Рахматиллаев ТимурТехническая структураиндекса• B-деревья• B+-деревья• GIN (General INverted INdex)
  • 41. 41Индексируй неиндексируемое, Рахматиллаев ТимурПостроение индекса• Процесс построения индекса –индексация• Индексация подразумевает полнуюперестройку индекса «с нуля»• Как правило индексация выполняетсяотдельной утилитой, входящей вкомплект поставки поискового движка
  • 42. 42Индексируй неиндексируемое, Рахматиллаев ТимурПостроение индекса1. Получение единичной записи одокументе из внешнего хранилища2. Получение данных для его полей3. Получение данных для его атрибутов4. Запись документа в индекс5. …6. PROFIT
  • 43. 43Индексируй неиндексируемое, Рахматиллаев ТимурКогда индексировать?
  • 44. 44Индексируй неиндексируемое, Рахматиллаев ТимурКогда индексировать?• Когда во внешнем хранилище былиизменены проиндексированныедокументы• Когда из внешнего хранилища былиудалены проиндексированныедокументы• Когда во внешнее хранилище былидобавлены документы
  • 45. 45Индексируй неиндексируемое, Рахматиллаев ТимурДельта-индексирование• Процесс индексирования, целью которогоявляется минимизация:• Времени «реагирования» индекса наизменения во внешнем хранилище• Нагрузки на внешнее хранилище пополучению из него данных для последующейиндексации• Заключается в индексации толькодобавленных/измененных документов иисключении из индекса удаленныхдокументов
  • 46. 46Индексируй неиндексируемое, Рахматиллаев ТимурДельта-индексирование• Дельта – набордобавленны/измененных/удаленныхдокументов• Критерии формирования дельты• Timestamp’ы• Идентификаторы• Очереди сообщений• …
  • 47. 47Индексируй неиндексируемое, Рахматиллаев ТимурИндексы реальноговремени• Индекс, в который доступна записьдокументов в произвольный момент времени
  • 48. 48Индексируй неиндексируемое, Рахматиллаев ТимурЧто включать в индекс?
  • 49. 49Индексируй неиндексируемое, Рахматиллаев ТимурЧто включать в индекс?• Структуру индекса определяетпоисковый запрос, для которого онпредназначен• Грубо говоря, в терминах веб-приложения индекс должен содержатьнабор и полей иатрибутов, сопоставляемый поисковойформе
  • 50. 50Индексируй неиндексируемое, Рахматиллаев ТимурСравнение Sphinx и ApacheSolrSphinx Apache SolrСкорость индексации 4.5 Мб/с 2.75 Мб/сСкорость поиска 7 мс / 75 мс 25 мс / 212 мсРазмер индекса 30% 20%Интерфейс API, SQL Веб-сервисСтеммеры 15 31Стоп-слова, синонимы Да ДаSoundex Да ДаПодсветка Да ДаСкорость поиска: 3 слова, 5 потоков, 1000 результатов,среднее/максимальное время на запрос
  • 51. 51Индексируй неиндексируемое, Рахматиллаев ТимурОсобенности Sphinx1. Высокая скорость индексации2. Высокая скорость поиска3. Высокая масштабируемость4. Распределенная возможность поиска5. Поддержка нескольких полей полнотекстового поиска вдокументе6. Поддержка нескольких дополнительных атрибутов длякаждого документа7. Поддержка стоп-слов8. Поддержка однобайтовых кодировок и UTF-89. Поддержка морфологического поиска10. Родная поддержка MySQL, PostgreSQL иподдержка ODBC совместимых баз данных
  • 52. 52Индексируй неиндексируемое, Рахматиллаев ТимурЧисловые показателипроизводительности1. Скорость индексациидо 10-15 МБ/сек на ядро (средняя 4.5 МБ/сек по результатамтеста с вычиткой данных)2. Скорость поискадо 150—250 запросов в секунду на каждое ядро с 1 000 000документов (3 слова, 5 потоков, 1000 документов в среднемищет за 7 мс по результатам теста)3. Размер индекса30% от данных (без поддержки инфиксного поиска)4. Высокая масштабируемостьКрупнейший известный кластер индексирует до 3 000 000 000документов и поддерживает более 50 миллионов запросов вдень
  • 53. 53Индексируй неиндексируемое, Рахматиллаев ТимурКонфигурирование Sphinx• Основной конфигурационный файл –sphinx.conf• Параметры командной строки призапуске sphinxd.exe• Список словоформ замены –wordforms.txt• Является прямым указанием стеммеру• Применяется на этапе индексации (sic!)
  • 54. 54Индексируй неиндексируемое, Рахматиллаев ТимурТипы атрибутов Sphinx• Целые числа (от 1 до 32 бит)• UNIX timestamps• Числа с плавающей точкой (32 бита)• Строки• MVA (списки произвольнойдлины, содержащие целые числадлиной в 32 бита)
  • 55. 55Индексируй неиндексируемое, Рахматиллаев ТимурОперации над индексами• Ротация• Объединение• Объединение с использованием killlist
  • 56. 56Индексируй неиндексируемое, Рахматиллаев ТимурМы начинаем КВН мастер-класс…«Хватит трепаться,покажите мне код»Линус Торвальдс
  • 57. 57Индексируй неиндексируемое, Рахматиллаев ТимурДальнейшее изучениеIntroduction to Search with Sphinxhttp://sphinxsearch.com/docs/Официальная документация:Andrew Aksyonoff
  • 58. 58Индексируй неиндексируемое, Рахматиллаев ТимурСпасибо за вниманиеРахматиллаев ТимурByndyuSoftmail@eskat0n.rutwitter.com/eskat0n