解释 API

编辑

返回关于特定文档为何匹配(或不匹配)查询的信息。

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

请求

编辑

GET /<索引>/_explain/<ID>

POST /<索引>/_explain/<ID>

先决条件

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

描述

编辑

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

路径参数

编辑
<ID>
(必需,整数)定义文档 ID。
<索引>

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

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

查询参数

编辑
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 或 false,或要返回的字段列表。
_source_excludes

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

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

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

_source_includes

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

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

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

请求正文

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

示例

编辑
resp = client.explain(
    index="my-index-000001",
    id="0",
    query={
        "match": {
            "message": "elasticsearch"
        }
    },
)
print(resp)
response = client.explain(
  index: 'my-index-000001',
  id: 0,
  body: {
    query: {
      match: {
        message: 'elasticsearch'
      }
    }
  }
)
puts response
const response = await client.explain({
  index: "my-index-000001",
  id: 0,
  query: {
    match: {
      message: "elasticsearch",
    },
  },
});
console.log(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 参数的示例

resp = client.explain(
    index="my-index-000001",
    id="0",
    q="message:search",
)
print(resp)
response = client.explain(
  index: 'my-index-000001',
  id: 0,
  q: 'message:search'
)
puts response
const response = await client.explain({
  index: "my-index-000001",
  id: 0,
  q: "message:search",
});
console.log(response);
GET /my-index-000001/_explain/0?q=message:search

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