现有的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查询的用户的反馈。试试看,让我们知道您的想法是什么!