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