现有的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 需要请求主体为 换行分隔的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查询的用户的反馈。试试看,让我们知道您的想法是什么!