现有的 HTTP 接口仅具有简单的功能。Manticore Search 2.5.1 中新增的端点启动了一个新的 API。
到目前为止,存在 2 个端点:
新的端点 /json 与前两个不同,旨在通过 HTTP 上的 JSON 提供一个独立的新 API,无论是在请求还是响应中。
有些人可能会问,为什么在我们已经有 SphinxQL 的情况下还要添加一个新的 API?它的优势是什么?
使用 Manticore Search 的常见方式是使用 SphinxQL。语法几乎与现有的 SQL 协议相同,您只需要一个 MySQL 客户端或库。HTTP 接口需要一个 HTTP 客户端,而大多数语言已经自带一个,因此无需额外安装包,甚至更好的是,您可以简单地使用浏览器(带有 REST API 扩展)连接到引擎并进行测试。还有一些情况是用户根本不使用 MySQL 或传统数据库,他们期望像其他项目一样使用 HTTP 协议。
第二个优势,更重要的是,使用 HTTP 上的 JSON 可以允许更复杂的请求和响应。未来,我们可以添加能够执行多个查询的端点,这些查询之间可以相互连接(比如说一个查询的参数可以使用另一个查询的结果),并且响应可以包含比一组行更复杂的结构。
当前用于数据操作的端点包括 /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 的用户的反馈。试试看,让我们知道您的想法是什么!