现有的HTTP接口仅具备简单功能。在Manticore Search 2.5.1中新增的端点启动了一个新的API。
到目前为止,存在两个端点:
新增的端点 /json ,与前两个不同,旨在提供一个新的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的用户的反馈。试一试并告诉我们您的想法!