Solr: мощная поисковая платформа от Apache

Solr (произносится: солнечный) — это подпроект с открытым исходным кодом, основанный на свободном программном обеспечении Lucene от Apache. Solr основан на Lucene Core и написан на языке Java. Как поисковая платформа, Apache Solr является одним из самых популярных инструментов для интеграции вертикальных поисковых систем. К преимуществам Solr также относятся широкий набор функций (включающий, например, фасетный поиск результатов) и ускоренное индексирование. Кроме того, он работает на серверных контейнерах, таких как Apache Tomcat. Сначала мы расскажем, как работает Apache Solr, а затем в учебнике по Solr объясним, на что следует обратить внимание при первом использовании программы.

Истоки Apache Solr

Поисковая платформа Solr была построена на основе Lucene. Apache Lucene Core был разработан разработчиком программного обеспечения Дугом Каттингом в 1997 году. Сначала он предлагал его через сервис хостинга файлов SourceForge. В 1999 году Apache Software Foundation запустила проект Jakarta для поддержки и развития свободного программного обеспечения Java. В 2001 году частью этого проекта стал и Lucene — он также был написан на Java. С 2005 года он является одним из основных проектов Apache и работает под свободной лицензией Apache. Lucene породил несколько подпроектов, таких как Lucy (Lucene, написанный на C) и Lucene.NET (Lucene на C#). Популярная поисковая платформа Elasticsearch также основана на Lucene, как и Solr.

Solr также был создан в 2004 году и основан на Lucene: в то время, однако, сервлет еще назывался Solar и распространялся компанией CNET Networks. «Solar» означало «Поиск на Lucene и Resin».

В 2006 году CNET передала проект в Apache Foundation, где он прошел еще один период разработки. Когда в 2007 году Solr был представлен общественности как отдельный проект, он быстро привлек внимание сообщества. В 2010 году сообщество Apache интегрировало сервлет в проект Lucene. Эта совместная разработка гарантирует хорошую совместимость. Пакет дополняют SolrCloud и парсер Solr, Tika.

Определение

Apache Solr — это платформонезависимая поисковая платформа для проектов на базе Java. Проект с открытым исходным кодом основан на Java-библиотеке Lucene. Он автоматически объединяет документы в режиме реального времени и формирует динамические кластеры. Solr совместим с PHP, Python, XML и JSON. Сервлет имеет веб-интерфейс пользователя, а обмен командами осуществляется по протоколу HTTP. Solr предоставляет пользователям дифференцированный полнотекстовый поиск по насыщенным текстовым документам. Он особенно подходит для вертикальных поисковых систем на статических веб-сайтах. Расширение с помощью SolrCloud позволяет использовать дополнительные ядра и расширенную классификацию фрагментов.

Введение в Solr: объяснение основных терминов

Apache Solr интегрирован в Lucene в качестве сервлета. Поскольку он дополняет программную библиотеку Lucene, мы кратко объясним, как он работает. Кроме того, многие сайты используют Solr в качестве основы для своей вертикальной поисковой системы (Netflix и eBay — известные примеры). Мы объясним, что это такое, в следующем разделе.

Что такое Apache Lucene?

Свободное программное обеспечениеLucene — это библиотека Java с открытым исходным кодом, которую можно использовать на любой платформе. Lucene известна как масштабируемая и мощная библиотека NoSQL. Она особенно подходит для поисковых систем в Интернете — как для поиска во всем Интернете, так и для поиска в масштабах домена и локальных запросов.

Факт

Lucene Core — это программная библиотека для языка программирования Java. Библиотеки служат только в качестве упорядоченной коллекции подпрограмм. Разработчики используют эти коллекции для связи программ со вспомогательными модулями через интерфейс. Пока программа запущена, она может получить доступ к необходимому компоненту в библиотеке.

Поскольку библиотека делит документы на текстовые поля и классифицирует их логически, полнотекстовый поиск Lucene работает очень точно. Lucene также найдет релевантные совпадения для похожих текстов/документов. Это означает, что библиотека также подходит для рейтинговых сайтов, таких как Yelp. Пока он распознает текст, не имеет значения, какой формат используется (простой текст, PDF, HTML или другие). Вместо индексирования файлов, Lucene работает с текстом и метаданными. Тем не менее, файлы должны быть прочитаны из библиотеки.

Именно поэтому команда Lucene разработала ныне независимый проект Apache — Tika. Apache Tika — это практический инструмент для анализа, перевода и индексирования текста. Инструмент считывает текст и метаданные из более чем тысячи типов файлов. Затем он извлекает текст и делает его доступным для дальнейшей обработки. Tika состоит из синтаксического анализатора и детектора. Парсер анализирует тексты и структурирует содержимое в упорядоченную иерархию. Детектор типизирует содержимое. Например, он распознает типы файлов, а также тип содержимого из метаданных.

Наиболее важные функции и возможности Lucene:

  • Быстрое индексирование, как пошаговое, так и пакетное (до 150 ГБ в час согласно спецификации).
  • Экономичное использование оперативной памяти
  • Написана на Java, поэтому является кроссплатформенной (варианты на альтернативных языках программирования — Apache Lucy и Lucene.NET).
  • Интерфейс для плагинов
  • Поиск по текстовым полям (такие категории, как содержание, заголовок, автор, ключевое слово) — даже возможность поиска по нескольким полям одновременно
  • Сортировка по текстовым полям
  • Вывод результатов поиска по сходству/релевантности

Lucene разделяет документы на текстовые поля, такие как заголовок, автор и тело текста. Для поиска в этих полях программа использует синтаксический анализатор запросов. Это считается особенно эффективным инструментом для поисковых запросов с ручным вводом текста. Простой синтаксис состоит из поискового термина и модификатора. Поисковые термины могут быть отдельными словами или группами слов. Вы изменяете их с помощью модификатора или связываете несколько терминов с помощью булевых переменных в сложный запрос. Точные команды см. в синтаксисе синтаксического анализатора запросов Apache.

Lucene также поддерживает нечеткий поиск на основе расстояния Левенштейна. Последнее фиксирует количество изменений символов (т.е. замена, вставка или удаление) для перехода от одной осмысленной строки символов к другой. Вот пример: «beer» (заменить e на a) до «bear» имеет расстояние 1, поскольку потребовался только один шаг.

Вы можете задать значение, определяющее, насколько большими могут быть отклонения от исходного поискового термина, чтобы релевантный термин все равно был включен в поисковые результаты. Это значение находится в диапазоне от 0 до 1 — чем ближе оно к 1, тем более похожим должно быть поисковое совпадение с выводимым словом. Если вы не вводите значение, оно автоматически становится равным 0,5, и соответствующая команда выглядит следующим образом.

beer~

Если вы хотите задать конкретное значение (0,9 в примере), введите следующую команду:

beer~0.9

Приблизительный поиск построен аналогичным образом, и вы можете искать слова, а также определять, насколько далеко поисковые термины могут находиться друг от друга в тексте, но при этом оставаться релевантными. Например, если вы ищете фразу «Алиса в стране чудес», вы можете указать, что слова «Алиса» и «Страна чудес» должны находиться в радиусе 3 слов:

"alice wonderland"~3

Что такое вертикальная поисковая система?

Lucene позволяет осуществлять поиск как в Интернете, так и внутри доменов. Поисковые системы, которые охватывают широкий диапазон страниц, называются горизонтальными поисковыми системами. К ним относятся известные провайдеры Google, Bing, Yahoo, DuckDuckGo и Startpage. Вертикальная поисковая система, с другой стороны, ограничена доменом, конкретной темой или целевой группой. Поисковая система, ориентированная на конкретный домен, помогает посетителям, заходящим на ваш сайт, найти конкретные тексты или предложения. Примерами тематически ориентированных поисковых систем являются рекомендательные порталы, такие как TripAdvisor или Yelp, а также системы поиска работы. Поисковые системы, ориентированные на целевые группы, например, предназначены для детей и молодежи или ученых, которые ищут источники.

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

Факт

Онтология и таксономия — это два принципа в компьютерной науке, которые важны для правильного архивирования. Таксономия имеет дело с разделением терминов на классы. Они выстраиваются в иерархию, похожую на древовидную диаграмму. Онтология идет на шаг дальше и размещает термины в логической связи друг с другом. Группы фраз собираются в кластеры, которые сигнализируют о тесной взаимосвязи. Более того, связанные группы терминов соединяются друг с другом, создавая сеть отношений.

Индекс Lucene — это практичный, масштабируемый архив для быстрого поиска. Однако есть несколько важных шагов, которые необходимо часто повторять, поскольку они не происходят автоматически. Наконец, для вертикального поиска вам нужен широко разветвленный индекс. Именно здесь на помощь приходит Apache Solr. Поисковая платформа расширяет функции библиотеки, и Solr может быть быстро и легко настроен с помощью правильных команд — даже новичками в Java. Сервлет предлагает вам множество практических инструментов, с помощью которых вы сможете создать вертикальную поисковую систему для вашего интернет-представительства и адаптировать ее к потребностям ваших посетителей за короткое время.

Что такое Solr? Как работает поисковая платформа

Поскольку теперь у вас есть базовая информация об основе Lucene и о том, как можно использовать Solr, ниже мы объясним, как работает поисковая платформа, как она расширяет функции Lucene и как с ней работать.

Solr: основные элементы

Solr написан на Java, что означает, что вы можете использовать платформу сервлетов независимо. Команды обычно пишутся на языке HTTP (Hypertext Transfer Protocol), а для файлов, которые необходимо сохранить, используется XML (Extensible Markup Language). Apache Solr также предлагает разработчикам Python и Ruby знакомый им язык программирования через API (Application Programming Interface). Те, кто обычно работает с JavaScript Object Notation (сокращенно: JSON), найдут, что ElasticSearch предлагает оптимальную среду. Solr также может работать с этим форматом через API.

Хотя поисковая платформа основана на Lucene и органично вписывается в ее архитектуру, Solr может работать и самостоятельно. Он совместим с серверными контейнерами, такими как Apache Tomcat.

Индексирование для получения точных результатов поиска — за доли секунды

Структурно сервлет основан на инвертированном индексе. Solr использует для этого библиотеку Lucene. Инвертированные файлы являются подтипом индекса базы данных и предназначены для ускорения поиска информации. Индекс сохраняет содержимое в библиотеке. Это могут быть слова или числа. Если пользователь ищет конкретный контент на сайте, он обычно вводит один или два поисковых термина, относящихся к теме. Вместо того чтобы перебирать весь сайт в поисках этих слов, Solr использует библиотеку.

Она индексирует все важные ключевые слова почти в режиме реального времени и связывает их с документами на сайте, где встречаются искомые слова. Поиск просто пробегает по индексу, чтобы найти нужный термин. В списке результатов отображаются все документы, в которых это слово хотя бы раз встречается в соответствии с индексом. Этот тип поиска эквивалентен аналогичному поиску в учебнике: Если вы ищете ключевое слово в индексе в конце книги, вы найдете информацию о том, на каких страницах этот термин встречается во всем тексте. Там вы просто прокрутите страницу вниз. Вертикальный веб-поиск показывает список результатов со ссылками на соответствующие документы.

Чтобы этот процесс работал гладко, теоретически необходимо вводить все ключевые слова и метаданные (например, автора или год публикации) в библиотеке каждый раз, когда новый документ добавляется в портфолио сайта. Поэтому работа в бэкенде с Lucene может быть немного утомительной. Но Solr может автоматизировать эти шаги.

Релевантность и фильтр

Apache Solr использует онтологию и таксономию Lucene для выдачи высокоточных результатов поиска. Здесь также помогают булевы переменные и усечение. Solr добавляет кэш более высокого уровня к кэшу Lucene, что означает, что сервлет запоминает часто задаваемые поисковые запросы, даже если они состоят из сложных переменных. Это оптимизирует скорость поиска.

Если вы хотите удержать пользователей на своем сайте, вы должны предложить им хороший пользовательский опыт. В частности, это включает в себя создание правильных предложений. Например, если ваши посетители ищут информацию о разведении кур, то тексты об их разведении и кормлении должны появляться в качестве первых результатов поиска в верхней части списка. Рецепты, включающие курицу, или даже фильмы о курах не должны быть включены в результаты поиска или, по крайней мере, должны появляться гораздо ниже по странице.

Независимо от того, ищут ли пользователи определенный термин или им должны быть показаны интересные тематические предложения с внутренними ссылками в конце увлекательной статьи: в обоих случаях релевантность результатов очень важна. Solr использует меру tf-idf для обеспечения того, чтобы отображались только релевантные для пользователя результаты поиска.

Факт

Термин «term frequency inverse document frequency» или «tf-idf» означает числовую статистику. Плотность поисковых слов в документе (т.е. количество раз, когда один термин встречается в тексте) сравнивается с количеством документов во всем поисковом пуле, содержащих этот термин. Таким образом, вы можете увидеть, действительно ли поисковый термин встречается в контексте документа чаще, чем во всех текстах.

Solr: наиболее важные функции

Apache Solr собирает и индексирует данные практически в режиме реального времени при поддержке Lucene Core. Под данными понимаются документы. Как в поиске, так и в индексе, документ является решающей единицей измерения. Индекс состоит из нескольких документов, которые, в свою очередь, состоят из нескольких текстовых полей. В базе данных документ находится в строке таблицы. Поле находится в столбце таблицы.

Связанный через API с Apache Zookeeper, Solr имеет единую точку контакта, которая обеспечивает синхронизацию, регистры имен и распределение конфигурации. Это включает, например, кольцевой алгоритм, который назначает координатора (также: лидера) процессам в распределенной системе. Проверенный и испытанный механизм устранения неполадок Zookeeper также повторно запускает процессы при потере маркеров и находит узлы (компьютеры в системе) с помощью функции обнаружения узлов. Все эти функции гарантируют, что ваш проект всегда останется свободно масштабируемым.

Это также означает, что поисковая система работает даже в самых сложных условиях. Как уже упоминалось, веб-сайты с интенсивным трафиком, которые ежедневно хранят и обрабатывают огромные объемы данных, также используют Apache Solr. Если одного сервера Solr недостаточно, просто подключите несколько серверов через облако Solr. Затем вы можете фрагментировать свои наборы данных по горизонтали — это также называется шардингом. Для этого необходимо разделить библиотеку на логически связанные фрагменты. Это позволяет расширить библиотеку за пределы доступного пространства для хранения. Apache также рекомендует загружать несколько копий библиотеки на разные серверы. Это увеличивает коэффициент репликации. Если одновременно поступает много запросов, они распределяются по разным серверам.

Solr расширяет полнотекстовый поиск, уже предлагаемый Lucene, дополнительными функциями. Эти функции поиска включают, но не ограничиваются ими:

  • Адаптация терминов и для групп слов: Система обнаруживает орфографические ошибки при вводе поиска и выдает результаты для исправленной альтернативы.
     
  • Объединения: Смесь декартова произведения (несколько терминов рассматриваются в любом порядке во время поиска) и выбора (отображаются только термины, удовлетворяющие определенному условию), составляет сложный синтаксис булевой переменной.
     
  • Группировка тематически связанных терминов.
     
  • Классификация по фасетам: Система классифицирует каждый элемент информации по нескольким параметрам. Например, она связывает текст с такими ключевыми словами, как имя автора, язык и длина текста. Кроме того, существуют темы, которым посвящен текст, а также хронологическая классификация. Фасетный поиск позволяет пользователю использовать несколько фильтров для получения индивидуального списка результатов.
     
  • Поиск по «дикой карте»: Символ представляет собой неопределенный элемент или несколько одинаковых элементов в строке символов? Тогда используйте «?» для одного символа и «*» для нескольких. Например, вы можете ввести фрагмент слова плюс символ-заместитель (например: teach*). Тогда в список результатов будут включены все термины с этим корневым словом (например: учитель, учить, преподавать). Таким образом, пользователи получают результаты по данной тематической области. Необходимая релевантность является результатом тематического ограничения вашей библиотеки или дополнительных ограничений поиска. Например, если пользователи ищут слово «b?nd», они получают такие результаты, как band, bond, bind. Такие слова, как «binding» или «bonding», не включаются в поиск, поскольку символ»?» заменяет только одну букву.
     
  • Распознает текст во многих форматах, от Microsoft Word до текстовых редакторов, PDF и индексированного богатого контента.
     
  • Распознает различные языки.

Кроме того, сервлет может интегрировать несколько ядер, состоящих из индексов Lucene. Ядро собирает всю информацию в библиотеку, там же можно найти файлы конфигурации и схемы. Это задает поведение Apache Solr. Если вы хотите использовать расширения, просто интегрируйте собственные скрипты или плагины из сообщений сообщества в конфигурационный файл.

Преимущества

Недостатки

Добавляет практические возможности к Lucene

Менее подходит для динамических данных и объектов

Автоматическое индексирование в реальном времени

Добавление ядер и разбиение фрагментов может быть выполнено только вручную

Полнотекстовый поиск

Глобальный кэш может стоить времени и места для хранения по сравнению с сегментированным кэшем

Фасетный поиск и группировка ключевых слов

 

Полный контроль над фрагментами

 

Облегчает горизонтальное масштабирование поисковых серверов

 

Легко интегрируется в ваш собственный веб-сайт

 

Учебник: загрузка и настройка Apache Solr

Системные требования для Solr не особенно высоки: все, что вам нужно — это Java SE Runtime Environment, начиная с версии 1.8.0. Разработчики тестировали сервлет на Linux/Unix, macOS и Windows в разных версиях. Просто скачайте соответствующий установочный пакет и распакуйте файл.zip (пакет для Windows) или файл.tgz (пакет для Unix, Linux и OSX) в выбранный вами каталог.

Учебник по Solr: шаг 1 — загрузка и начало работы

  1. Зайдите на страницу проекта Solr основного проекта Apache Lucene. В верхней части окна появится строка меню. В разделе «Features» Apache кратко информирует вас о функциях Solr. В разделе «Ресурсы» вы найдете учебники и документацию. В разделе «Сообщество» поклонники Solr помогут вам с любыми вопросами. В этой области вы также можете добавить свои собственные сборки.
     
  2. Нажмите на кнопку загрузки для установки. Это приведет вас на страницу загрузки со списком зеркал загрузки. Текущая версия Solr (7.3, по состоянию на май 2018 года) от сертифицированного поставщика должна быть вверху. В качестве альтернативы выберите из HTTP-ссылки и FTP-загрузки. Нажмите на ссылку, чтобы перейти на зеркальный сайт соответствующего провайдера.
  1. На изображении выше показаны различные доступные пакеты загрузки — в данном случае для Solr версии 7.3.
  • solr-7.3.0-src.tgz — это пакет для разработчиков. Он содержит исходный код, поэтому вы можете работать над ним вне сообщества GitHub.
  • solr-7.3.0.tgz — это версия для пользователей Mac, Linux и Unix.
  • solr-7.3.0.zip содержит пакет Solr, совместимый с Windows.
  • в папке changes/ вы найдете документацию для соответствующей версии.

После того как вы выбрали оптимальную для ваших требований версию, щелкнув по ней, появится окно загрузки. Сохраните файл, затем, когда загрузка будет завершена, нажмите на кнопку загрузки в браузере или откройте папку загрузки.

  1. Распакуйте файл zip или файл.tgz. Если вы хотите сначала ознакомиться с Solr, выберите любой каталог. Туда вы сохраните распакованные файлы. Если вы уже знаете, как хотите использовать Solr, выберите подходящий для этого сервер. Или создайте кластерную облачную среду Solr, если вы хотите увеличить масштаб (подробнее об облаке в следующей главе).
Примечание

Теоретически, одна библиотека Lucene может индексировать примерно 2,14 миллиарда документов. Однако на практике это число обычно не достигается до того, как количество документов скажется на производительности. Поэтому при соответствующем большом количестве документов целесообразно с самого начала планировать работу с облаком Solr.

  1. В нашем примере для Linux мы работаем с Solr 7.3.0. Код в этом руководстве был протестирован в Ubuntu. Вы также можете использовать примеры для macOS. В принципе, команды работают и в Windows, но с обратными слешами вместо обычных слешей.

Введите «cd /[source path]» в командной строке, чтобы открыть каталог Solr и запустить программу. В нашем примере это выглядит следующим образом:

cd /home/test/Solr/solr-7.3.0
bin/solr start

Теперь сервер Solr работает на порту 8983, и ваш брандмауэр может попросить вас разрешить это. Подтвердите это.

Если вы хотите остановить Solr, введите следующую команду:

bin/solr stop -all

Если Solr работает, ознакомьтесь с программой. С помощью демонстрационной версии Solr вы можете запустить программу в одном из четырех режимов:

  • Solr cloud (команда: cloud)
  • Обработчик импорта данных (команда: dih)
  • Без схемы (команда: schemaless)
  • Подробный пример с KitchenSink (команда: techproducts).

Примеры имеют схему, адаптированную для каждого случая. Вы редактируете ее с помощью интерфейса схемы. Для этого введите эту команду (вставка[example] означает одно из вышеупомянутых ключевых слов):

bin/solr -e [example]
  1. Чтобы Solr работал в соответствующем режиме. Если вы хотите убедиться в этом, проверьте отчет о состоянии:
bin/solr status
Found 1 Solr nodes:
Solr process xxxxx running on port 8983
  1. Примеры содержат предварительно настроенные базовые параметры. Если вы начинаете без примера, вы должны сами определить схему и ядро. В ядре хранятся ваши данные. Без него вы не сможете индексировать или искать файлы. Чтобы создать ядро, введите следующую команду:
bin/solr create –c <name_of_core>
  1. Apache Solr имеет веб-интерфейс пользователя. Если вы успешно запустили программу, вы можете найти веб-приложение Solr admin в своем браузере по адресу «http://localhost:8983/solr/».
  1. Наконец, остановите Solr с помощью этой команды:
bin/solr stop -all

Самоучитель по Solr: часть 2, первые шаги

Solr предоставляет вам простой командный инструмент. С помощью так называемого инструмента post вы можете загружать содержимое на ваш сервер. Это могут быть как документы для индекса, так и конфигурации схемы. Для этого инструмент обращается к вашей коллекции. Поэтому вы всегда должны указывать ядро или коллекцию перед тем, как начать с ней работать.

В следующем примере кода мы сначала указываем общую форму <collection> с именем вашего ядра/коллекции. «-c» — это команда «create». Вы используете ее для создания ядра или коллекции. За ней вы определяете дополнительные параметры или выполняете команды. Например, выбираете порт с помощью «-p», а с помощью «*.xml» или «*.csv» загружаете все файлы с соответствующим форматом в вашу коллекцию (строки два и три). Команда «-d» удаляет документы в вашей коллекции (четвертая строка).

bin/post –c <collection> [options] <Files|collections|URLs>
bin/post –c <collection> -p 8983 *.xml
bin/post –c <collection> *.csv
bin/post –c <collection> -d '<delete><id>42</id><delete>'

Теперь вы знаете некоторые из основных команд для Solr. Демо-версия «KitchenSink» покажет вам, как именно настроить Apache Solr.

  1. Запустите Solr с помощью демонстрационной версии. Для демонстрационной версии KitchenSink используйте команду techproducts. В терминале введите следующее:
bin/solr –e techproducts

По умолчанию Solr запускается на порту 8983. Терминал показывает, что он создает новое ядро для вашей коллекции и индексирует некоторые образцы файлов для вашего каталога. В демо-версии KitchenSink вы должны увидеть следующую информацию:

Creating Solr home directory /tmp/solrt/solr-7.3.1/example/techproducts/solr
Starting up Solr on port 8983 using command:
bin/solr start -p 8983 -s "example/techproducts/solr"
Waiting up to 30 seconds to see Solr running on port 8983 [/]
Started Solr server on port 8983 (pid=12281). Happy searching!
Setup new core instance directory:
/tmp/solrt/solr-7.3.1/example/techproducts/solr/techproducts
Creating new core 'techproducts' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=techproducts&instanceDir=techproducts
{"responseHeader":
{"status":0,
"QTime":2060},
"core":"techproducts"}
Indexing tech product example docs from /tmp/solrt/solr-7.4.0/example/exampledocs
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update…
using content-type application/xml...
POSTing file money.xml to [base]
POSTing file manufacturers.xml to [base]
POSTing file hd.xml to [base]
POSTing file sd500.xml to [base]
POSTing file solr.xml to [base]
POSTing file utf8-example.xml to [base]
POSTing file mp500.xml to [base]
POSTing file monitor2.xml to [base]
POSTing file vidcard.xml to [base]
POSTing file ipod_video.xml to [base]
POSTing file monitor.xml to [base]
POSTing file mem.xml to [base]
POSTing file ipod_other.xml to [base]
POSTing file gb18030-example.xml to [base]
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:00.486
Solr techproducts example launched successfully. Direct your Web browser to
http://localhost:8983/solr to visit the Solr Admin UI
  1. Solr запущен и уже загрузил некоторые XML-файлы в индекс. Вы сможете работать с ними позже. В следующих шагах вы должны попробовать самостоятельно загрузить некоторые файлы в индекс. Это довольно просто сделать с помощью пользовательского интерфейса администратора Solr. Зайдите на сервер Solr в браузере. В нашей демонстрации Techproducts Solr уже указал сервер и порт. Введите в браузере следующий адрес: «http:://localhost:8983/solr/».

    Если вы уже самостоятельно определили имя сервера и порт, используйте следующую форму и введите имя сервера и номер порта в соответствующем месте: «http://[имя сервера]:[номер порта]/solr/».

    Здесь вы управляете папкой example/exampledocs. Она содержит файлы примеров и файл post.jar. Выберите файл, который вы хотите добавить в каталог, и используйте post.jar для его добавления. Для нашего примера мы используем more_books.jsonl.

    Для этого введите в терминале следующее:

cd example/exampledocs
Java -Dc=techproducts –jar post.jar more_books.jsonl

Если Solr успешно загрузил ваш файл в индекс, вы получите следующее сообщение:

SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update 
POSTing file more_books.jsonl to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:00.162
  1. При настройке поисковой платформы Apache Solr следует включать файлы конфигурации и схему напрямую. Они приведены в демонстрационных примерах. Если вы работаете на новом сервере, вы должны самостоятельно определить набор конфигов и схему.

    Схема (schema.xml) определяет количество, тип и структуру полей. Как уже упоминалось, документ в Lucene состоит из полей. Такое разделение облегчает целенаправленный полнотекстовый поиск. Solr работает с этими полями. Определенный тип поля принимает только определенное содержимое (например, <date> распознает даты только в форме год-месяц-день-время). Вы используете схему, чтобы определить, какие типы полей индекс распознает в дальнейшем и как он их назначает. Если вы этого не сделаете, то типы полей будут определены в документах. Это удобно на этапе тестирования, когда вы просто начинаете заполнять каталог. Однако такой подход может привести к проблемам в дальнейшем.

    Вот некоторые основные типы полей Solr:

  • DateRangeField (индексирует время и моменты времени вплоть до миллисекунд)
     
  • ExternalFileField (извлекает значения из внешней папки)
     
  • TextField (общее поле для ввода текста)
     
  • BinaryField (для двоичных данных)
     
  • CurrencyField индексирует два значения отдельно, но отображает их конечному пользователю как одно значение CurrencyField хранит числовое значение (например, 4.50) и валюту (например, $) в поле (конечный пользователь видит оба значения вместе ($4.50))
     
  • StrField (UTF-8 и Unicode строки в небольшом поле, которые не анализируются и не заменяются токеном)

 

Подробный список типов полей Solr и другие команды для настройки схем можно найти в Solr-Wiki.

Чтобы определить типы полей, вызовите schema.xml по адресу «http://localhost:8983/solr/techproducts/schema». В Techproducts уже определены типы полей. Командная строка в XML-файле более подробно описывает свойства поля с помощью атрибутов. Согласно документации, Apache Solr допускает следующие атрибуты для поля:

  • имя поля (Не должно быть пустым. Содержит имя поля).
     
  • type (Введите здесь допустимый тип поля. Не должно быть пустым).
     
  • indexed (Означает «введено в индекс». Если значение равно true, вы можете искать поле или сортировать его).
     
  • stored (Описывает, хранится ли поле, если значение «true», то к полю можно получить доступ).
     
  • multiValued (Если поле содержит несколько значений для документа, введите здесь значение «true»).
     
  • default (Введите значение по умолчанию, которое появляется, если для нового документа значение не указано).
     
  • compressed (Редко, так как применимо только к gzip-сжимаемым полям, по умолчанию установлено значение «false». Для сжатия должно быть установлено значение «true»).
     
  • omitNorms (по умолчанию установлено значение «true». Сохраняет стандарты для поля и, таким образом, экономит память).
     
  • termOffsets (Требует больше памяти. Хранит векторы вместе с информацией о смещении (т.е. дополнениями к адресу памяти).
     
  • termPositions (Требует больше памяти, так как хранит позицию терминов вместе с вектором).
     
  • termVectors (По умолчанию установлено значение «false», сохраняет термины вектора, если «true»).

Вы либо вводите свойства поля непосредственно в xml-файл схемы, либо используете команду в терминале. Это простой тип поля в файле схемы xml:

<fields>
<field name="name" type="text_general" indexed="true" multivalued=”false” stored="true" />
</fields>

В качестве альтернативы вы можете использовать терминал ввода. Там вы просто вводите команду curl, устанавливаете свойства поля и отправляете его через интерфейс схемы, указав адрес файла:

curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/techproducts/schema 
  1. После того, как вы адаптировали схему, наступает очередь конфигурации Solr. Она используется для определения параметров поиска. Это важные компоненты:
  • Параметры кэша запросов
  • Обработчики запросов
  • Расположение каталога данных
  • Компоненты поиска

Параметры кэша запросов позволяют использовать три типа кэширования: LRUCache, LFUCache и FastLRUCache. LRUCache использует связанную хэш-карту, а FastLRUCache собирает данные через параллельную хэш-карту. Эта хэш-карта обрабатывает запросы одновременно. Таким образом, поисковый сервер быстрее выдает ответы, если параллельно поступает много поисковых запросов. FastLRUCache считывает данные быстрее, чем LRUCache, а вставляет медленнее.

Факт

Хэш-карта присваивает значения ключу. Ключ уникален — для каждого ключа существует только одно значение. Ключи могут быть любыми объектами. По нему вычисляется хэш-значение, которое практически является «адресом», то есть точной позицией в индексе. Используя его, можно найти значения ключей в таблице.

Обработчик запросов обрабатывает запросы. Он считывает протокол HTTP, выполняет поиск в индексе и выводит ответы. Конфигурация примера «techproducts» включает стандартный обработчик для Solr. Компоненты поиска перечислены в обработчике запросов. Эти элементы выполняют поиск. По умолчанию обработчик содержит следующие компоненты поиска:

  • query (запрос)
  • facet (фасет)
  • mlt (More Like This)
  • highlight (лучший)
  • статистика (статистика)
  • отладка
  • expand (расширить поиск)

Для компонента поиска More Like This (mlt), например, введите эту команду:

<searchComponent name="mlt" class="org.apache.solr.handler.component.MoreLikeThisComponent" />

More Like This находит документы, похожие по содержанию и структуре. Это класс внутри Lucene. Запрос находит контент для посетителей вашего сайта путем сравнения строки и индексированных полей.

Чтобы настроить список, сначала откройте обработчик запроса:

<requestHandler name="standard" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
<!--
<int name="rows">10</int>
<str name="fl">*</str>
<str name="version">2.1</str>
-->
</lst>
</requestHandler>

Добавьте свои собственные компоненты в список в обработчике запроса или измените существующие компоненты поиска. Эти компоненты выполняют поиск, когда посетитель сайта вводит поисковый запрос на вашем домене. Следующая команда вставляет самодельный компонент перед стандартными компонентами:

<arr name="first-components">
<str>NameOfTheOwnComponent</str>
</arr>

Чтобы вставить компонент после стандартных компонентов:

<arr name="last-components">
<str>NameOfTheOwnComponent</str>
</arr>

Так можно переименовать существующие компоненты:

<arr name="components">
<str>facet</str>
<str>NameOfTheOwnComponent</str>
</arr>

Каталог данных по умолчанию находится в каталоге основного экземпляра «instanceDir» под именем «/data». Если вы хотите использовать другой каталог, измените его расположение через solrconfig.xml. Для этого укажите фиксированный путь или привяжите имя каталога к ядру (SolrCore) или instanceDir. Для привязки к ядру напишите:

<dataDir>/solr/data/$(solr.core.name)</dataDir>

Учебник по Solr часть 3: создание облачного кластера Solr

Apache Solr предоставляет демонстрацию облака, чтобы объяснить, как настроить облачный кластер. Конечно, вы также можете пройти через этот пример самостоятельно.

  1. Сначала запустите интерфейс командной строки. Чтобы запустить Solr в облачном режиме, введите следующее:
bin/solr -e cloud

Запустится демонстрация.

  1. Укажите, сколько серверов (здесь: узлов) должно быть подключено через облако. Число может быть от[1] до [4] (в примере это[2]). Демонстрация работает на одной машине, но для каждого сервера используется свой порт, который вы указываете на следующем шаге. (В демо-версии показаны номера портов).
Welcome to the SolrCloud example!

This interactive session will help you launch a SolrCloud cluster on your local workstation.
To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]
Please enter the port for node1 [8983]
Please enter the port for node2 [7574]
solr start –cloud -s example/cloud/node1/solr -p 8983
solr start –cloud -s example/cloud/node2/solr -p 7574

После того как вы назначили все порты, скрипт запустится и покажет вам (как показано выше) команды для запуска сервера.

  1. Если все серверы запущены, выберите имя для вашего сборника данных (квадратные скобки обозначают заполнители и не отображаются в коде).
Please provide a name for your new collection: [insert_name_here]
  1. Используйте SPLITSHARD для создания фрагмента из этой коллекции. Позже вы можете снова разделить его на фрагменты. Это ускорит поиск, если одновременно получено несколько запросов.
http://localhost:8983/solr/admin/collections?action=CREATESHARD&shard=[NewFragment]&collection[NameOfCollection]

После создания фрагментов с помощью SPLITSHARD вы можете распределить данные с помощью маршрутизатора. По умолчанию Solr интегрирует маршрутизатор compositeID (router.key=compositeId).

Факт

Маршрутизатор определяет, как данные распределяются по фрагментам и сколько битов использует ключ маршрутизатора. Например, если используется 2 бита, маршрутизатор индексирует данные на четверть каждого фрагмента. Это не позволяет большим записям на одном фрагменте занимать всю память. Ведь это замедлило бы поиск. Чтобы использовать маршрутизатор, введите значение маршрутизатора (например, имя пользователя, такое как JohnDoe1), номер бита и идентификатор документа в такой форме: [Имя пользователя] /[Номер бита]! [Идентификатор документа] (например: JohnDoe1/2!1234).

С помощью интерфейса разделите фрагмент на две части. Оба раздела содержат одну и ту же копию исходных данных. Индекс разделяет их по вновь созданным подобластям.

/admin/collections?action=SPLITSHARD&collection=[NameOfCollection]&shard=[FragmentNumber]
  1. Для последнего шага необходимо определить имя каталога конфигурации. Доступны шаблоны sample-techproducts-configs и _default. Последний не определяет схему, поэтому вы можете настроить свою собственную схему. С помощью следующей команды вы можете отключить функцию отсутствия схемы в _default для интерфейса Solr Cloud:
curl http://localhost:8983/api/collections/[_name_of_collection]/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'

Это не позволит полям создавать свои собственные схемы, несовместимые с остальными файлами. Поскольку для этой настройки необходим HTTP-метод POST, вы не можете просто использовать адресную строку браузера. localhost:8983 означает первый сервер. Если вы выбрали другой номер порта, вставьте его туда. Замените [_name_of_collection] на выбранное вами имя.

Теперь вы настроили облако Solr. Чтобы проверить, правильно ли отображается ваша новая коллекция, проверьте статус еще раз:

bin/solr status

Для более детального обзора распределения ваших фрагментов смотрите интерфейс администратора. Адрес состоит из имени вашего сервера с номером порта и соединения с облаком Solr в таком виде: «http://servername:portnummer/solr/#/~cloud».

Расширение Apache Solr с помощью плагинов

Apache Solr уже имеет некоторые расширения. Это так называемые обработчики. Мы уже представили обработчик запросов. Lucene (и, следовательно, Solr) также поддерживает некоторые практические нативные сценарии, такие как класс Solr Analyzer и класс Similarity. Вы интегрируете подключаемые модули в Solr через JAR-файл. Если вы создаете свои собственные плагины и взаимодействуете с интерфейсами Lucene, вам следует добавить lucene-*.jars из вашей библиотеки (solr/lib/) в путь класса, который вы используете для компиляции исходного кода вашего плагина.

Этот метод работает, если вы используете только одно ядро. Используйте облако Solr для создания общей библиотеки для JAR-файлов. Вы должны создать каталог с атрибутом «sharedLib» в файле solr.xml на вашем сервлете. Это простой способ загрузки подключаемых модулей на отдельные ядра:

Если вы собрали собственное ядро, создайте каталог для библиотеки командой «mkdir» (в Windows: «md») в таком виде:

mkdir solr/[example]/solr/CollectionA/lib

Познакомьтесь с Solr и попробуйте одну из прилагаемых демо-версий, перейдя по адресу «example/solr/lib». В обоих случаях вы сейчас находитесь в каталоге библиотеки каталога вашего экземпляра. Именно здесь вы сохраните JAR-файлы ваших плагинов.

В качестве альтернативы используйте старый метод из более ранних версий Solr, если, например, у вас не получилось с первым вариантом на вашем контейнере сервлетов.

  • Для этого распакуйте файл solr.war.
  • Затем добавьте JAR-файл с вашими самостоятельно созданными классами в каталог WEBINF/lib. Вы можете найти этот каталог через веб-приложение по такому пути: server/solrwebapp/webapp/WEB-INF/lib.
  • Снова сожмите модифицированный WAR-файл.
  • Используйте созданный вами solr.war.

Если вы добавите опцию «dir» к библиотеке, она добавит в classpath все файлы внутри каталога. Используйте «regex=» для исключения файлов, которые не соответствуют требованиям «regex».

<lib dir="${solr.install.dir:../../../}/contrib/../lib" regex=".*.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regexe="plugin_name-d.*.jar" />

Если вы создаете собственный сценарий плагина, мы рекомендуем использовать лисп-диалект Clojure for Java Runtime. Этот язык программирования поддерживает интерактивную разработку программ. Другие языки интегрируют свои собственные свойства. Clojure делает их доступными через библиотеку. Это хороший способ использовать сервлет Solr.

Язык программирования и создания сценариев Groovy поддерживает динамическую и статическую типизацию на виртуальной машине Java. Язык основан на Ruby и Python и компилируется в байт-код Java. Они могут быть запущены в виде сценария. Groovy обладает некоторыми функциями, расширяющими возможности Java. Например, в Groovy встроен простой шаблон, который можно использовать для создания кода на SQL или HTML. Синтаксис Groovy из коробки также предоставляет некоторые общие выражения или поля данных для списков. Если вы обрабатываете JSON или XML для своей поисковой платформы Solr, Groovy может помочь сохранить синтаксис чистым и понятным.

Solr против Elasticsearch

Когда речь заходит о поисковых системах с открытым исходным кодом, Solr и Elasticsearch всегда находятся на переднем крае тестов и опросов. Обе поисковые платформы основаны на Java-библиотеке Lucene от Apache. Очевидно, что Lucene — это стабильный фундамент. Библиотека гибко индексирует информацию и быстро предоставляет ответы на сложные поисковые запросы. На этой основе обе поисковые системы работают достаточно хорошо. Каждый из проектов также поддерживается активным сообществом.

Команда разработчиков Elasticsearch сотрудничает с GitHub, в то время как Solr базируется в Apache Foundation. Для сравнения, проект Apache имеет более долгую историю. А активное сообщество документирует все изменения, возможности и ошибки с 2007 года. Документация Elasticsearch не такая полная, что является одним из критических замечаний. Однако Elasticsearch не обязательно отстает от Apache Solr в плане удобства использования.

Elasticsearch позволяет создать библиотеку за несколько шагов. Для получения дополнительных возможностей вам понадобятся плагины премиум-класса. Они позволяют управлять настройками безопасности, контролировать работу поисковой платформы или анализировать метрики. Поисковая платформа поставляется с хорошо подобранным семейством продуктов. Под маркой Elastic-Stack и X-Pack вы получаете некоторые базовые функции бесплатно. Однако премиум-пакеты доступны только по ежемесячной подписке — с одной лицензией на узел. Solr, с другой стороны, всегда бесплатен — включая такие расширения, как Tika и Zookeeper.

Эти две поисковые системы больше всего отличаются по своей направленности. И Solr, и Elasticsearch могут использоваться как для небольших наборов данных, так и для больших данных, распределенных по нескольким средам. Но Solr фокусируется на текстовом поиске. Концепция Elasticsearch объединяет поиск с анализом. Сервлет обрабатывает метрики и журналы с самого начала. Elasticsearch легко справляется с соответствующими объемами данных. Сервер динамически объединяет ядра и фрагменты и делает это с самой первой версии.

Когда-то Elasticsearch опережал своего конкурента, Solr, но уже несколько лет облако Solr также делает возможной фасетную классификацию. Однако Elasticsearch все еще немного впереди, когда речь идет о динамических данных. В свою очередь, конкурент набирает очки при работе со статическими данными. Он выдает целевые результаты для полнотекстового поиска и точно вычисляет данные.

Различные базовые концепции также отражаются в кэшировании. Оба провайдера в основном разрешают кэширование запросов. Если в запросе используются сложные булевы переменные, оба хранят вызванные элементы индекса в сегментах. Они могут объединяться в более крупные сегменты. Однако если изменяется только один сегмент, Apache Solr должен аннулировать и перезагрузить весь глобальный кэш. Elasticsearch ограничивает этот процесс затронутым подсегментом. Это экономит место и время хранения.

Если вы регулярно работаете с XML, HTTP и Ruby, вы также без проблем освоитесь с Solr. JSON, с другой стороны, был добавлен позже через интерфейс. Поэтому язык и сервлет еще не идеально подходят друг другу. Elasticsearch, с другой стороны, общается через JSON. Другие языки, такие как Python, Java, .NET, Ruby и PHP, связывают поисковую платформу с REST-подобным интерфейсом.

Резюме

Solr от Apache и Elastic от Elasticsearch — две мощные поисковые платформы, которые мы можем полностью рекомендовать. Те, кто уделяет больше внимания анализу данных и работает с динамичными веб-сайтами, хорошо освоят Elasticsearch. Solr больше подходит тем, кому нужен точный полнотекстовый поиск по вашему домену. Благодаря сложным переменным и настраиваемым фильтрам вы можете создать вертикальную поисковую систему в точном соответствии с вашими потребностями.

 

Solr

Elasticsearch

Тип

Бесплатная поисковая платформа с открытым исходным кодом

Бесплатная поисковая платформа с открытым исходным кодом и проприетарные версии (бесплатная и по подписке)

Поддерживаемые языки

Нативный: Java, XML, HTTP

API: JSON, PHP, Ruby, Groovy, Clojure

Нативный: JSON

API: Java, .NET, Python, Ruby, PHP

База данных

Библиотеки Java, NoSQL, с онтологией и таксономией, особенно Lucene

Библиотеки Java, NoSQL, особенно Lucene, а также Hadoop

Узлы & классификация фрагментов

  • Довольно статичные

  • Узлы с Solr cloud и фрагменты с SPLITSHARD должны быть добавлены вручную

  • Начиная с Solr7: автоматическое масштабирование через интерфейс

  • Контроль над фрагментами через кольцевой алгоритм

  • Обнаружение узлов с помощью Zookeeper API

  • Динамический

  • Добавляет узлы и фрагменты с помощью внутреннего инструмента, меньше контроля над лидерами

  • Обнаружение узлов с помощью встроенного инструмента Zen

Кэш

Глобальный кэш (применяется ко всем подсегментам в сегменте)

Сегментированный кэш

Полнотекстовый поиск

  • Многие функции включены в исходный код — также предлагает функции Lucene

  • Парсер запросов

  • Приложения для работы с предложениями

  • Поиск по сходству

  • Проверка орфографии на разных языках

  • Совместимость со многими форматами насыщенного текста

  • Выделение

  • Поиск в основном основан на функциях Lucene

  • Интерфейс для поисковых предложений проясняет маску поиска для конечных пользователей, но менее настраиваемый

  • Проверка орфографии, сопоставление через API

  • Менее настраиваемое выделение

Оцените статью
cdelat.ru
Добавить комментарий