解释 API编辑

返回有关特定文档匹配(或不匹配)查询的原因的信息。

response = client.explain(
  index: 'my-index-000001',
  id: 0,
  body: {
    query: {
      match: {
        message: 'elasticsearch'
      }
    }
  }
)
puts response
GET /my-index-000001/_explain/0
{
  "query" : {
    "match" : { "message" : "elasticsearch" }
  }
}

请求编辑

GET /<index>/_explain/<id>

POST /<index>/_explain/<id>

先决条件编辑

  • 如果启用了 Elasticsearch 安全功能,您必须对目标索引具有 read 索引权限

描述编辑

解释 API 计算查询和特定文档的评分解释。这可以提供有用的反馈,说明文档是否匹配或不匹配特定查询。

路径参数编辑

<id>
(必需,整数)定义文档 ID。
<index>

(必需,字符串)用于限制请求的索引名称。

此参数只能提供单个索引名称。

查询参数编辑

analyzer

(可选,字符串)用于查询字符串的分析器。

此参数只能在指定 q 查询字符串参数时使用。

analyze_wildcard

(可选,布尔值)如果为 true,则分析通配符和前缀查询。默认为 false

此参数只能在指定 q 查询字符串参数时使用。

default_operator

(可选,字符串)查询字符串查询的默认运算符:AND 或 OR。默认为 OR

此参数只能在指定 q 查询字符串参数时使用。

df

(可选,字符串)用作默认字段,在查询字符串中没有给出字段前缀时使用。

此参数只能在指定 q 查询字符串参数时使用。

lenient

(可选,布尔值)如果为 true,则忽略查询字符串中基于格式的查询失败(例如,向数字字段提供文本)。默认为 false

此参数只能在指定 q 查询字符串参数时使用。

preference
(可选,字符串)指定应执行操作的节点或分片。默认情况下为随机。
q
(可选,字符串)Lucene 查询字符串语法中的查询。
stored_fields
(可选,字符串)要返回响应中的存储字段的逗号分隔列表。
routing
(可选,字符串)用于将操作路由到特定分片的自定义值。
_source
(可选,字符串)是否返回 _source 字段,或返回字段列表。默认为 true。
_source_excludes

(可选,字符串)要从响应中排除的 源字段 的逗号分隔列表。

您还可以使用此参数从 _source_includes 查询参数中指定的子集中排除字段。

如果 _source 参数为 false,则忽略此参数。

_source_includes

(可选,字符串)要包含在响应中的 源字段 的逗号分隔列表。

如果指定此参数,则只返回这些源字段。您可以使用 _source_excludes 查询参数从此子集中排除字段。

如果 _source 参数为 false,则忽略此参数。

请求正文编辑

query
(可选,查询对象)使用 查询 DSL 定义搜索定义。

示例编辑

response = client.explain(
  index: 'my-index-000001',
  id: 0,
  body: {
    query: {
      match: {
        message: 'elasticsearch'
      }
    }
  }
)
puts response
GET /my-index-000001/_explain/0
{
  "query" : {
    "match" : { "message" : "elasticsearch" }
  }
}

API 返回以下响应

{
   "_index":"my-index-000001",
   "_id":"0",
   "matched":true,
   "explanation":{
      "value":1.6943598,
      "description":"weight(message:elasticsearch in 0) [PerFieldSimilarity], result of:",
      "details":[
         {
            "value":1.6943598,
            "description":"score(freq=1.0), computed as boost * idf * tf from:",
            "details":[
               {
                  "value":2.2,
                  "description":"boost",
                  "details":[]
               },
               {
                  "value":1.3862944,
                  "description":"idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:",
                  "details":[
                     {
                        "value":1,
                        "description":"n, number of documents containing term",
                        "details":[]
                     },
                     {
                        "value":5,
                        "description":"N, total number of documents with field",
                        "details":[]
                     }
                  ]
               },
               {
                  "value":0.5555556,
                  "description":"tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:",
                  "details":[
                     {
                        "value":1.0,
                        "description":"freq, occurrences of term within document",
                        "details":[]
                     },
                     {
                        "value":1.2,
                        "description":"k1, term saturation parameter",
                        "details":[]
                     },
                     {
                        "value":0.75,
                        "description":"b, length normalization parameter",
                        "details":[]
                     },
                     {
                        "value":3.0,
                        "description":"dl, length of field",
                        "details":[]
                     },
                     {
                        "value":5.4,
                        "description":"avgdl, average length of field",
                        "details":[]
                     }
                  ]
               }
            ]
         }
      ]
   }
}

还有一种更简单的方法可以使用 q 参数指定查询。指定的 q 参数值将被解析,就像使用 query_string 查询一样。解释 API 中 q 参数的使用示例

response = client.explain(
  index: 'my-index-000001',
  id: 0,
  q: 'message:search'
)
puts response
GET /my-index-000001/_explain/0?q=message:search

API 返回与上一个请求相同的结果。