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

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

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

  • /search - выполнение поисковых запросов в простом формате
  • /sql - выполнение SphinxQL select, что позволяет повторно использовать поиск в формате 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 требует тело запроса в формате 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