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

1.492 visualizaciones

Publicado el

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

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

Publicado en: Tecnología
0 comentarios
1 recomendación
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
1.492
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
24
Comentarios
0
Recomendaciones
1
Insertados 0
No insertados

No hay notas en la diapositiva.

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

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

×