Введение в HTTP JSON API

Существующий HTTP интерфейс предлагает только простую функциональность. Новые конечные точки, добавленные в Manticore Search 2.5.1, запускают новый API.

До сих пор существовало 2 конечные точки:

  • /search - выполнение поисковых запросов в простом формате
  • /sql - выполнение выборки SphinxQL, что позволяет повторно использовать поиск в формате SphinxQL без использования клиента mysql

Новая конечная точка, /json , в отличие от первых 2, стремится предоставить новый API самостоятельно, используя JSON через HTTP как в запросах, так и в ответах.

Некоторые могут спросить, зачем добавлять новый API, когда у нас уже есть SphinxQL? Каковы его преимущества?

Для использования Manticore Search обычный способ - это использование SphinxQL. Синтаксис почти такой же, как и существующие SQL протоколы, и вам нужен только клиент или библиотека MySQL. HTTP интерфейс требует HTTP клиента, и большинство языков уже имеют его, поэтому нет необходимости устанавливать дополнительные пакеты, и что лучше, вы можете просто использовать браузер (с расширением REST API), чтобы подключиться к движку и проводить тесты. Также есть случаи, когда пользователи вообще не используют MySQL или традиционную базу данных и ожидают, как это делают другие проекты, протокол HTTP.

Вторым преимуществом и более важным является то, что использование JSON через HTTP может позволить более сложные запросы и ответы. В будущем мы могли бы добавить конечные точки, которые могут выполнять больше, чем просто один запрос, например, возможность выполнять несколько связанных запросов (скажем, один мог бы использовать в своих параметрах результаты другого) и ответы, которые могут содержать более сложные структуры, чем коллекция строк.

Текущие конечные точки для манипуляции данными включают /json/insert , /json/update , /json/replace и /json/delete . Также есть /bulk, который позволяет пакетные операции манипуляции данными, и они могут быть разных типов. Обратите внимание, что /json/bulk требует тело запроса в формате newline-delimited json .

Поиск доступен на конечной точке /json/search . Поиск организован как абстрактное синтаксическое дерево запросов, встроенное как объект JSON, и может содержать условия листовых запросов, такие как “match”, “range”, “sort” (используется для полнотекстовых совпадений , фильтрации по атрибутам ) или составные условия запроса, такие как “bool” (для комбинирования других запросов логически) или условия поведения (такие как “profile”, чтобы включить профилирование запроса в ответе). Подсветка текста также может быть объявлена в запросе, чтобы получить выделенный фрагмент в ответе. Гео-дистанция также функциональна и может использоваться при сортировке. Улучшения и новые команды будут добавлены в будущих релизах.

Простой пример фразового поиска:

 curl -X POST 'http://localhost:9308/json/search' -d '{"index":"geodemo","query":{"match_phrase":{"name":"Gloucester City Middle School"}}}'

И ответ:

{
  "took": 1,
  "timed_out": false,
  "hits": {
    "total": 1,
    "hits": [
      {
        "_id": "7142245",
        "_score": 4609,
        "_source": {
          "elevation": 0,
          "population": 0,
          "latitude": 0.69612807035446167,
          "longitude": -1.3109307289123535,
          "latitude_deg": 39.885200500488281,
          "longitude_deg": -75.110801696777344,
          "name": "Gloucester City Middle School and High School",
          "feature_code": "SCH",
          "country_code": "US",
          "state_code": "NJ",
          "level3_code": "",
          "level4_code": "",
          "dem": "",
          "timezone": ""
        }
      }
    ]
  }
}

API все еще находится на ранней стадии. Мы стремимся иметь синтаксис, похожий на Query DSL, и много того, что доступно в SphinxQL, еще не портировано. Для этого нам нужна обратная связь от пользователей, заинтересованных в использовании JSON запросов вместо существующих API. Попробуйте и дайте нам знать, что вы об этом думаете!

Установить Manticore Search

Установить Manticore Search