Существующий 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. Попробуйте и дайте нам знать, что вы об этом думаете!