Блог

Полезные статьи и новости о жизни WaveAccess

Cервис для текстового поиска "Solr"

Solr — платформа для «full text search», разработанная на базе библиотеки Apache Lucene. Проще говоря, это самостоятельный сервис для текстового поиска среди различных документов. Зачем же использовать Solr, если исходная библиотека имеет весьма впечатляющие возможности и подходит для множества целей? Solr предоставляет не только удобный механизм получения данных, но и имеет множество дополнительных компонентов. Запуск как отдельного сервиса дает возможность подключения его в любое приложение. Нет необходимости вести серьёзную разработку с учётом использования Solr, можно даже внедрить его на самых поздних этапах создания проекта. В конечном итоге, взаимодействие производится через HTTP API, что дает легкость в подключении и использовании.

Как упоминалось, реализация сервиса дает возможность гибкой настройки для конкретных задач. Механизм обработки данных состоит из множества модулей, которые подключаются к ядру. Количество модулей постоянно растет, появляются как более специфические, так и универсальные компоненты, а при необходимости можно создать свой собственный. Для примера приведу возможность поиска синонимов, аббревиатур, поиска по конкретным типам данных и по степени схожести, использование маркеров замены,... Кроме того Solr имеет встроенный механизм кеширования запросов, благодаря чему достигается ещё большая скорость получения данных (даже с учётом неоптимизированной логики запросов). Существует большое количество модулей «из коробки», которые вполне решают практически любую вообразимую задачу.

Быстрый поиск достигается за счёт комплексного механизма индексирования. В результате запроса данных обрабатываются исключительно индексы, а не исходный текст. Механизм индексации автоматизирован, но может быть очень гибко настроен в зависимости от конкретных потребностей. Также  необходимо отметить простоту использования сервиса. Сам запрос представляет собой набор различных параметров, которые позволяют всячески выбрать, отфильтровать и отсортировать необходимые данные. Можно указать необходимый формат передаваемых/принимаемых данных (основными являются XML и JSON). Такая гибкость дает возможность использовать любой удобный механизм взаимодействия с сервисом. Уже существуют реализации (как серверные, так и клиентские) для ещё более простого выбора данных. Но для начала работы не обязательно реализовывать какой-либо процесс запроса-получения данных. Solr имеет веб интерфейс, используемый для обработки, тестирования и анализа данных. В конструкторе фильтров можно сформировать необходимый url, выполнить запрос и просмотреть результат. Для более детального изучения можно включить debug-mode, при котором в запросе дополнительно появляются метаданные, указывающие на причину выбора каждого из документов. Таким образом можно ознакомиться с возможностями или просто отладить запрос.

 Solr, мастер построения запросов, текстовый поиск, Apache Lucene

Рис. 1 Мастер построения запросов

Ниже приведен пример создания соответствующего запроса.

{
  "responseHeader": {
    "status": 0,
    "QTime": 3,
    "params": {
      "q": "*:*",
      "indent": "true",
      "wt": "json",
      "_": "1417524247869"
    }
  },
  "response": {
    "numFound": 17,
    "start": 0,
    "docs": [
      {
        "id": "SP2514N",
        "name": "Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133",
        "manu": "Samsung Electronics Co. Ltd.",
        "cat": [
          "electronics",
          "hard drive"
        ],
        "features": [
          "7200RPM, 8MB cache, IDE Ultra ATA-133",
          "NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor"
        ],
        "price": 92,
        "price_c": "92,USD",
        "popularity": 6,
        "inStock": true,
        "_version_": 1471069944284184600
      },
      {
        "id": "6H500F0",
        "name": "Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300",
        "manu": "Maxtor Corp.",
        "cat": [
          "electronics",
          "hard drive"
        ],
        "features": [
          "SATA 3.0Gb/s, NCQ",
          "8.5ms seek",
          "16MB cache"
        ],
        "price": 350,
        "price_c": "350,USD",
        "popularity": 6,
        "inStock": true,
        "_version_": 1471069944287330300
      },
      {
        "id": "F8V7067-APL-KIT",
        "name": "Belkin Mobile Power Cord for iPod w/ Dock",
        "manu": "Belkin",
        "cat": [
          "electronics",
          "connector"
        ],
        "features": [
          "car power adapter, white"
        ],
        "weight": 4,
        "price": 19.95,
        "price_c": "19.95,USD",
        "popularity": 1,
        "inStock": false,
        "_version_": 1471069944289427500
      }
    ]
  }
}

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

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

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

Выводы

Итак, мы выяснили, что Solr удачно подходит для широко востребованных задач, а также для решения более специфических задач связанных с поиском. Ниже приведен основной перечень возможностей, которые легко реализуются «из коробки»:

  • Фильтры
  • Синонимы, аббревиатуры
  • Проверка орфографии или авто-коррекция. В случае неправильно введенного слова предлагать варианты правильного написания «Возможно, вы имели ввиду …»
  • Автоматическое дополнение
  • Маркеры замены
  • Поиск среди результатов (с применением кеширования результатов промежуточных запросов)
  • Stop Words (исключающиеся слова)
  • Поддержка поиска фразы целиком, поддержка поиска слова с исключением.
  • Сортировка результата.
  • Возможность автоматически обновлять индексы.

Если цели большей мерой перекрываются приведённым списком – стоит задуматься об использовании Solr, особенно в случае применения на поздней стадии разработки проекта.

Заказать звонок

Удобное время:

Отменить

Пишите!

Присоединить
Файл не больше 30 Мб.
Отменить