Explain API

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html

译文链接 : http://apache.wiki/display/Elasticsearch/Explain+API

贡献者 : @琴剑蓝天

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

index 和 type 参数分别期望单个索引和单个类型。

用法

完整查询示例:

  1. GET /twitter/tweet/0/_explain
  2. {
  3. "query" : {
  4. "match" : { "message" : "elasticsearch" }
  5. }
  6. }

这将产生以下结果:

  1. {
  2. "_index" : "twitter",
  3. "_type" : "tweet",
  4. "_id" : "0",
  5. "matched" : true,
  6. "explanation" : {
  7. "value" : 1.55077,
  8. "description" : "sum of:",
  9. "details" : [ {
  10. "value" : 1.55077,
  11. "description" : "weight(message:elasticsearch in 0) [PerFieldSimilarity], result of:",
  12. "details" : [ {
  13. "value" : 1.55077,
  14. "description" : "score(doc=0,freq=1.0 = termFreq=1.0\n), product of:",
  15. "details" : [ {
  16. "value" : 1.3862944,
  17. "description" : "idf(docFreq=1, docCount=5)",
  18. "details" : [ ]
  19. }, {
  20. "value" : 1.1186441,
  21. "description" : "tfNorm, computed from:",
  22. "details" : [
  23. { "value" : 1.0, "description" : "termFreq=1.0", "details" : [ ] },
  24. { "value" : 1.2, "description" : "parameter k1", "details" : [ ] },
  25. { "value" : 0.75, "description" : "parameter b", "details" : [ ] },
  26. { "value" : 5.4, "description" : "avgFieldLength", "details" : [ ] },
  27. { "value" : 4.0, "description" : "fieldLength", "details" : [ ] }
  28. ]
  29. } ]
  30. } ]
  31. }, {
  32. "value" : 0.0,
  33. "description" : "match on required clause, product of:",
  34. "details" : [ {
  35. "value" : 0.0,
  36. "description" : "# clause",
  37. "details" : [ ]
  38. }, {
  39. "value" : 1.0,
  40. "description" : "_type:tweet, product of:",
  41. "details" : [
  42. { "value" : 1.0, "description" : "boost", "details" : [ ] },
  43. { "value" : 1.0, "description" : "queryNorm", "details" : [ ] }
  44. ]
  45. } ]
  46. } ]
  47. }
  48. }

还有一种更简单的通过 q 参数指定查询的方法。 然后解析指定的 q 参数值,就像使用 query_string 查询一样。 在api中的 q 参数的用法示例:

  1. GET /twitter/tweet/0/_explain?q=message:search

这将产生与先前请求相同的结果。

所有的参数

Name Description
_source 设置为true以检索所解释的文档的_source。 您还可以使用_source_include&_source_exclude检索文档的一部分(有关更多详细信息,请参阅Get API)
stored_fields 允许控制哪些存储字段作为文档说明的一部分返回。
routing 在索引期间使用路由的情况下控制路由。
parent 与设置 routing 参数的效果相同。
preference 控制执行解释的分片。
source 允许请求的数据放在url的查询字符串中。
q 查询字符串(映射到 query_string 查询)。
df 在查询中未定义字段前缀时使用的默认字段。 默认为_all字段。
analyzer 分析查询字符串时使用的分析器名称。 默认为_all字段的分析器。
analyze_wildcard 是否分析通配符和前缀查询。 默认为false。
lowercase_expanded_terms 术语是否自动小写,默认为 true
lenient 如果设置为 true 将导致基于格式的失败(例如向数字字段提供文本)被忽略。 默认为 false
default_operator 要使用的默认运算符,可以是 ANDOR。 默认为 OR