⚠️ 此页面为自动翻译,翻译可能不完美。

An introduction to the HTTP JSON API

现有的HTTP接口仅具备简单功能。在Manticore Search 2.5.1中新增的端点启动了一个新的API。

到目前为止,存在两个端点:

  • /search - 使用简单格式执行搜索查询
  • /sql - 执行SphinxQL选择,从而允许以SphinxQL格式重用搜索而无需使用mysql客户端

新增的端点 /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的用户的反馈。试一试并告诉我们您的想法!

安装Manticore Search

安装Manticore Search