Explain API

特定のドキュメントがクエリに一致する理由(または一致しない理由)に関する情報を返します。

Python

  1. resp = client.explain(
  2. index="my-index-000001",
  3. id="0",
  4. query={
  5. "match": {
  6. "message": "elasticsearch"
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.explain(
  2. index: 'my-index-000001',
  3. id: 0,
  4. body: {
  5. query: {
  6. match: {
  7. message: 'elasticsearch'
  8. }
  9. }
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.explain({
  2. index: "my-index-000001",
  3. id: 0,
  4. query: {
  5. match: {
  6. message: "elasticsearch",
  7. },
  8. },
  9. });
  10. console.log(response);

Console

  1. GET /my-index-000001/_explain/0
  2. {
  3. "query" : {
  4. "match" : { "message" : "elasticsearch" }
  5. }
  6. }

Request

GET /<index>/_explain/<id>

POST /<index>/_explain/<id>

Prerequisites

  • Elasticsearchのセキュリティ機能が有効になっている場合、ターゲットインデックスに対してread インデックス権限を持っている必要があります。

Description

explain APIは、クエリと特定のドキュメントに対するスコアの説明を計算します。これにより、ドキュメントが特定のクエリに一致するかどうかの有用なフィードバックを得ることができます。

Path parameters

  • <id>
  • (必須、整数)ドキュメントIDを定義します。
  • <index>
  • (必須、文字列)リクエストを制限するために使用されるインデックス名。
    このパラメータには、単一のインデックス名のみを指定できます。

Query parameters

  • analyzer
  • (オプション、文字列)クエリ文字列に使用するアナライザー。
    このパラメータは、qクエリ文字列パラメータが指定されている場合にのみ使用できます。
  • analyze_wildcard
  • (オプション、Boolean)trueの場合、ワイルドカードおよびプレフィックスクエリが分析されます。デフォルトはfalseです。
    このパラメータは、qクエリ文字列パラメータが指定されている場合にのみ使用できます。
  • default_operator
  • (オプション、文字列)クエリ文字列クエリのデフォルトオペレーター:ANDまたはOR。デフォルトはORです。
    このパラメータは、qクエリ文字列パラメータが指定されている場合にのみ使用できます。
  • df
  • (オプション、文字列)クエリ文字列にフィールドプレフィックスが指定されていない場合に使用するデフォルトのフィールド。
    このパラメータは、qクエリ文字列パラメータが指定されている場合にのみ使用できます。
  • lenient
  • (オプション、Boolean)trueの場合、クエリ文字列内の形式ベースのクエリ失敗(数値フィールドにテキストを提供するなど)は無視されます。デフォルトはfalseです。
    このパラメータは、qクエリ文字列パラメータが指定されている場合にのみ使用できます。
  • preference
  • (オプション、文字列)操作を実行するノードまたはシャードを指定します。デフォルトはランダムです。
  • q
  • (オプション、文字列)Luceneクエリ文字列構文のクエリ。
  • stored_fields
  • (オプション、文字列)レスポンスに返す保存されたフィールドのカンマ区切りリスト。
  • routing
  • (オプション、文字列)特定のシャードに操作をルーティングするために使用されるカスタム値。
  • _source
  • (オプション、文字列)_sourceフィールドを返すかどうか、または返すフィールドのリスト。
  • _source_excludes
  • (オプション、文字列)レスポンスから除外するソースフィールドのカンマ区切りリスト。
    このパラメータを使用して、_source_includesクエリパラメータで指定されたサブセットからフィールドを除外することもできます。
    _sourceパラメータがfalseの場合、このパラメータは無視されます。
  • _source_includes
  • (オプション、文字列)レスポンスに含めるソースフィールドのカンマ区切りリスト。
    このパラメータが指定されている場合、これらのソースフィールドのみが返されます。_source_excludesクエリパラメータを使用して、このサブセットからフィールドを除外できます。
    _sourceパラメータがfalseの場合、このパラメータは無視されます。

Request body

Examples

Python

  1. resp = client.explain(
  2. index="my-index-000001",
  3. id="0",
  4. query={
  5. "match": {
  6. "message": "elasticsearch"
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.explain(
  2. index: 'my-index-000001',
  3. id: 0,
  4. body: {
  5. query: {
  6. match: {
  7. message: 'elasticsearch'
  8. }
  9. }
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.explain({
  2. index: "my-index-000001",
  3. id: 0,
  4. query: {
  5. match: {
  6. message: "elasticsearch",
  7. },
  8. },
  9. });
  10. console.log(response);

Console

  1. GET /my-index-000001/_explain/0
  2. {
  3. "query" : {
  4. "match" : { "message" : "elasticsearch" }
  5. }
  6. }

APIは次のレスポンスを返します:

Console-Result

  1. {
  2. "_index":"my-index-000001",
  3. "_id":"0",
  4. "matched":true,
  5. "explanation":{
  6. "value":1.6943598,
  7. "description":"weight(message:elasticsearch in 0) [PerFieldSimilarity], result of:",
  8. "details":[
  9. {
  10. "value":1.6943598,
  11. "description":"score(freq=1.0), computed as boost * idf * tf from:",
  12. "details":[
  13. {
  14. "value":2.2,
  15. "description":"boost",
  16. "details":[]
  17. },
  18. {
  19. "value":1.3862944,
  20. "description":"idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:",
  21. "details":[
  22. {
  23. "value":1,
  24. "description":"n, number of documents containing term",
  25. "details":[]
  26. },
  27. {
  28. "value":5,
  29. "description":"N, total number of documents with field",
  30. "details":[]
  31. }
  32. ]
  33. },
  34. {
  35. "value":0.5555556,
  36. "description":"tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:",
  37. "details":[
  38. {
  39. "value":1.0,
  40. "description":"freq, occurrences of term within document",
  41. "details":[]
  42. },
  43. {
  44. "value":1.2,
  45. "description":"k1, term saturation parameter",
  46. "details":[]
  47. },
  48. {
  49. "value":0.75,
  50. "description":"b, length normalization parameter",
  51. "details":[]
  52. },
  53. {
  54. "value":3.0,
  55. "description":"dl, length of field",
  56. "details":[]
  57. },
  58. {
  59. "value":5.4,
  60. "description":"avgdl, average length of field",
  61. "details":[]
  62. }
  63. ]
  64. }
  65. ]
  66. }
  67. ]
  68. }
  69. }

qパラメータを介してクエリを指定するより簡単な方法もあります。指定されたqパラメータの値は、query_stringクエリが使用されたかのように解析されます。explain APIでのqパラメータの使用例:

Python

  1. resp = client.explain(
  2. index="my-index-000001",
  3. id="0",
  4. q="message:search",
  5. )
  6. print(resp)

Ruby

  1. response = client.explain(
  2. index: 'my-index-000001',
  3. id: 0,
  4. q: 'message:search'
  5. )
  6. puts response

Js

  1. const response = await client.explain({
  2. index: "my-index-000001",
  3. id: 0,
  4. q: "message:search",
  5. });
  6. console.log(response);

Console

  1. GET /my-index-000001/_explain/0?q=message:search

APIは前のリクエストと同じ結果を返します。