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

HTTP JSON API 简介

现有的 HTTP 接口仅提供简单的功能。Manticore Search 2.5.1 新增的端点启动了一个全新的 API。

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

  • /search - 以简单格式执行搜索查询
  • /sql - 执行 SphinxQL 选择语句,从而允许在不使用 mysql 客户端的情况下重用 SphinxQL 格式的搜索

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

安装Manticore Search

安装Manticore Search