Выпуск поискового сервера Xapiand 0.9

Доступен выпуск поискового сервера Xapiand 0.9, предназначенного для хранения, индексации и поиска большой коллекции документов. Сервер является надстройкой над библиотекой для создания поисковых систем Xapian. Для асинхронной обработки запросов применяется библиотека libev. Код Xapiand написан на C++ и поставляется под лицензией MIT. Для упрощения развёртывания предоставляется готовый образ для системы Docker (dubalu/xapiand).

Обращение к серверу производится через HTTP RESTful API. Документы могут представлять собой любые данные в форматах JSON или MessagePack. Определение схемы хранения не требуется, выборка осуществляется при помощи полнотекстовых поисковых запросов. Поддерживается создание специализированных индексов для определённых типов данных и прикрепление более одного индекса. В том числе имеется встроенная поддержка индексации геопространственных данных, позволяющая комбинировать данные о местоположении с операциями полнотекстового поиска. Поддерживаются различные форматы хранения координат и иерархические пространственные индексы HTM (Hierarchical Triangular Mesh).

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

Новый выпуск примечателен переходом на движок Xapian 1.5.0, существенным увеличением производительности и стабилизацией средств для обработки геопространственных данных. Кроме того, представлена поддержка языка запросов QueryDSL, позволяющего формировать запросы в формате JSON. Например, можно применять логические операторы, фильтровать вывод по определённым значениям полей в документах, учитывать вес и число совпадений, преобразовывать значения полей из одного формата в другой, отсеивать документы в зависимости от пространств имён (вложенных полей, например, для хранения тегов).

Источник: OpenNET