フィールド機能API

複数のインデックス間でフィールドの機能を取得することを可能にします。データストリームの場合、APIはストリームのバックインデックス間のフィールド機能を返します。

Python

  1. resp = client.field_caps(
  2. fields="rating",
  3. )
  4. print(resp)

Ruby

  1. response = client.field_caps(
  2. fields: 'rating'
  3. )
  4. puts response

Js

  1. const response = await client.fieldCaps({
  2. fields: "rating",
  3. });
  4. console.log(response);

コンソール

  1. GET /_field_caps?fields=rating

リクエスト

GET /_field_caps?fields=<fields>

POST /_field_caps?fields=<fields>

GET /<target>/_field_caps?fields=<fields>

POST /<target>/_field_caps?fields=<fields>

前提条件

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

説明

フィールド機能APIは、複数のインデックス間のフィールドの機能に関する情報を返します。

フィールド機能APIは、他のフィールドと同様にkeywordを返します。たとえば、keywordの型を持つランタイムフィールドは、keywordファミリーに属する他のフィールドと同様に返されます。

パスパラメータ

  • <target>
  • (オプション、文字列) リクエストを制限するために使用されるデータストリーム、インデックス、およびエイリアスのカンマ区切りリスト。ワイルドカード(*)をサポートします。すべてのデータストリームとインデックスをターゲットにするには、このパラメータを省略するか、*または_allを使用します。

クエリパラメータ

  • fields
  • (必須、文字列) 機能を取得するためのフィールドのカンマ区切りリスト。ワイルドカード(*)式がサポートされています。
  • allow_no_indices
  • (オプション、ブール値) falseの場合、リクエストは、ワイルドカード式、インデックスエイリアスまたは_all値が欠落または閉じたインデックスのみをターゲットにする場合にエラーを返します。この動作は、リクエストが他のオープンインデックスをターゲットにしている場合でも適用されます。たとえば、foo*,bar*をターゲットにするリクエストは、fooで始まるインデックスがあるが、barで始まるインデックスがない場合にエラーを返します。
    デフォルトはtrueです。
  • expand_wildcards
  • (オプション、文字列) ワイルドカードパターンが一致できるインデックスのタイプ。リクエストがデータストリームをターゲットにできる場合、この引数はワイルドカード式が隠しデータストリームに一致するかどうかを決定します。カンマ区切りの値をサポートします。たとえば、open,hidden。有効な値は次のとおりです:
    • all
    • すべてのデータストリームまたはインデックスに一致し、隠しものも含まれます。
    • open
    • オープンで非隠しのインデックスに一致します。また、非隠しデータストリームにも一致します。
    • closed
    • 閉じた非隠しインデックスに一致します。また、非隠しデータストリームにも一致します。データストリームは閉じることができません。
    • hidden
    • 隠しデータストリームと隠しインデックスに一致します。openclosed、またはその両方と組み合わせる必要があります。
    • none
    • ワイルドカードパターンは受け入れられません。
      デフォルトはopenです。
  • ignore_unavailable
  • (オプション、ブール値) falseの場合、リクエストは欠落または閉じたインデックスをターゲットにする場合にエラーを返します。デフォルトはfalseです。
  • include_unmapped
  • (オプション、ブール値) trueの場合、1つのインデックスでマッピングされているが別のインデックスではマッピングされていない未マッピングフィールドが応答に含まれます。マッピングがないフィールドは決して含まれません。デフォルトはfalseです。
  • include_empty_fields
  • (オプション、ブール値) falseの場合、すべてのシャードで値を持たなかったフィールドは応答に含まれません。空でないフィールドは常に含まれます。このフラグは削除や更新を考慮しません。フィールドが空でなく、フィールドを含むすべてのドキュメントが削除された場合、またはフィールドが更新によって削除された場合でも、フラグがfalseであっても返されます。デフォルトはtrueです。
  • filters
  • (オプション、文字列) 応答に適用するフィルターのカンマ区切りリスト。
    1. - `````+metadata
    • メタデータフィールドのみを含める
    • -metadata
    • メタデータフィールドを除外する
    • -parent
    • 親フィールドを除外する
    • -nested
    • ネストされたフィールドを除外する
    • -multifield
    • マルチフィールドを除外する
  • types
  • (オプション、文字列) 含めるフィールドタイプのカンマ区切りリスト。これらのタイプのいずれかに一致しないフィールドは結果から除外されます。デフォルトは空であり、すべてのフィールドタイプが返されます。フィールド機能リクエストおよび応答におけるフィールドタイプに関する詳細はこちらを参照してください。

リクエストボディ

  • index_filter
  • (オプション、クエリオブジェクト 提供されたクエリがすべてのシャードでmatch_noneに書き換えられる場合、インデックスをフィルタリングできます。
  • runtime_mappings
  • (オプション、オブジェクト) 検索リクエストで行われるのと同様に、リクエスト内でアドホックindex_filterを定義します。これらのフィールドはクエリの一部としてのみ存在し、インデックスマッピングで同じ名前で定義されたフィールドよりも優先されます。

レスポンスボディ

レスポンスで使用されるタイプは、フィールドタイプのファミリーを説明します。通常、タイプファミリーはマッピングで宣言されたフィールドタイプと同じですが、同様に動作する特定のフィールドタイプは、タイプファミリーを使用して説明されます。たとえば、keywordconstant_keywordwildcardフィールドタイプはすべてkeywordタイプファミリーとして説明されます。

  • metadata_field
  • このフィールドがメタデータフィールドとして登録されているかどうか。
  • searchable
  • このフィールドがすべてのインデックスで検索用にインデックスされているかどうか。
  • aggregatable
  • このフィールドがすべてのインデックスで集約可能かどうか。
  • time_series_dimension
  • このフィールドがすべてのインデックスで時系列次元として使用されているかどうか。非時系列インデックスではこのフィールドは存在しません。
  • time_series_metric
  • このフィールドがすべてのインデックスで時系列メトリックとして使用されている場合、メトリックタイプが含まれ、フィールドがメトリックとして使用されていない場合は存在しません。非時系列インデックスではこのフィールドは含まれません。
  • indices
  • このフィールドが同じタイプファミリーを持つインデックスのリスト、またはすべてのインデックスがフィールドの同じタイプファミリーを持つ場合はnull。
  • non_searchable_indices
  • このフィールドが検索可能でないインデックスのリスト、またはすべてのインデックスがフィールドの同じ定義を持つ場合はnull。
  • non_aggregatable_indices
  • このフィールドが集約可能でないインデックスのリスト、またはすべてのインデックスがフィールドの同じ定義を持つ場合はnull。
  • non_dimension_indices
  • [プレビュー] この機能は技術プレビュー中であり、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために取り組みますが、技術プレビューの機能は公式GA機能のサポートSLAの対象ではありません。 このリストがレスポンスに存在する場合、一部のインデックスはこのフィールドを次元としてマークし、他のインデックスはこのリストにあるインデックスはそうではありません。
  • metric_conflicts_indices
  • [プレビュー] この機能は技術プレビュー中であり、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために取り組みますが、技術プレビューの機能は公式GA機能のサポートSLAの対象ではありません。 このフィールドが存在するインデックスのリスト、これらのインデックスがこのフィールドの同じtime_series_metric値を持たない場合。
  • meta
  • すべてのインデックスにわたるマージされたメタデータを文字列キーと値の配列のマップとして示します。値の長さが1の場合、すべてのインデックスがこのキーの同じ値を持っていたことを示し、長さが2以上の場合は、すべてのインデックスがこのキーの同じ値を持っていなかったことを示します。

リクエストは特定のデータストリームとインデックスに制限できます:

Python

  1. resp = client.field_caps(
  2. index="my-index-000001",
  3. fields="rating",
  4. )
  5. print(resp)

Ruby

  1. response = client.field_caps(
  2. index: 'my-index-000001',
  3. fields: 'rating'
  4. )
  5. puts response

Js

  1. const response = await client.fieldCaps({
  2. index: "my-index-000001",
  3. fields: "rating",
  4. });
  5. console.log(response);

コンソール

  1. GET my-index-000001/_field_caps?fields=rating

次の例API呼び出しは、ratingおよびtitleフィールドに関する情報を要求します:

Python

  1. resp = client.field_caps(
  2. fields="rating,title",
  3. )
  4. print(resp)

Ruby

  1. response = client.field_caps(
  2. fields: 'rating,title'
  3. )
  4. puts response

Js

  1. const response = await client.fieldCaps({
  2. fields: "rating,title",
  3. });
  4. console.log(response);

コンソール

  1. GET _field_caps?fields=rating,title

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

コンソール-結果

  1. {
  2. "indices": [ "index1", "index2", "index3", "index4", "index5" ],
  3. "fields": {
  4. "rating": {
  5. "long": {
  6. "metadata_field": false,
  7. "searchable": true,
  8. "aggregatable": false,
  9. "indices": [ "index1", "index2" ],
  10. "non_aggregatable_indices": [ "index1" ]
  11. },
  12. "keyword": {
  13. "metadata_field": false,
  14. "searchable": false,
  15. "aggregatable": true,
  16. "indices": [ "index3", "index4" ],
  17. "non_searchable_indices": [ "index4" ]
  18. }
  19. },
  20. "title": {
  21. "text": {
  22. "metadata_field": false,
  23. "searchable": true,
  24. "aggregatable": false
  25. }
  26. }
  27. }
  28. }
フィールドratingindex1およびindex2でlongとして定義されており、
keywordとしてindex3およびindex4で定義されています。
フィールドratingindex1で集約可能ではありません。
フィールドratingindex4で検索可能ではありません。
フィールドtitleはすべてのインデックスでtextとして定義されています。

デフォルトでは、未マッピングフィールドは無視されます。リクエストにinclude_unmappedというパラメータを追加することで、応答に含めることができます:

Python

  1. resp = client.field_caps(
  2. fields="rating,title",
  3. include_unmapped=True,
  4. )
  5. print(resp)

Ruby

  1. response = client.field_caps(
  2. fields: 'rating,title',
  3. include_unmapped: true
  4. )
  5. puts response

Js

  1. const response = await client.fieldCaps({
  2. fields: "rating,title",
  3. include_unmapped: "true",
  4. });
  5. console.log(response);

コンソール

  1. GET _field_caps?fields=rating,title&include_unmapped

この場合、応答には一部のインデックスに存在するがすべてのインデックスには存在しない各フィールドのエントリが含まれます:

コンソール-結果

  1. {
  2. "indices": [ "index1", "index2", "index3" ],
  3. "fields": {
  4. "rating": {
  5. "long": {
  6. "metadata_field": false,
  7. "searchable": true,
  8. "aggregatable": false,
  9. "indices": [ "index1", "index2" ],
  10. "non_aggregatable_indices": [ "index1" ]
  11. },
  12. "keyword": {
  13. "metadata_field": false,
  14. "searchable": false,
  15. "aggregatable": true,
  16. "indices": [ "index3", "index4" ],
  17. "non_searchable_indices": [ "index4" ]
  18. },
  19. "unmapped": {
  20. "metadata_field": false,
  21. "indices": [ "index5" ],
  22. "searchable": false,
  23. "aggregatable": false
  24. }
  25. },
  26. "title": {
  27. "text": {
  28. "metadata_field": false,
  29. "indices": [ "index1", "index2", "index3", "index4" ],
  30. "searchable": true,
  31. "aggregatable": false
  32. },
  33. "unmapped": {
  34. "metadata_field": false,
  35. "indices": [ "index5" ],
  36. "searchable": false,
  37. "aggregatable": false
  38. }
  39. }
  40. }
  41. }
フィールドratingindex5で未マッピングです。
フィールドtitleindex5で未マッピングです。

クエリでインデックスをフィルタリングすることも可能です:

Python

  1. resp = client.field_caps(
  2. index="my-index-*",
  3. fields="rating",
  4. index_filter={
  5. "range": {
  6. "@timestamp": {
  7. "gte": "2018"
  8. }
  9. }
  10. },
  11. )
  12. print(resp)

Ruby

  1. response = client.field_caps(
  2. index: 'my-index-*',
  3. fields: 'rating',
  4. body: {
  5. index_filter: {
  6. range: {
  7. "@timestamp": {
  8. gte: '2018'
  9. }
  10. }
  11. }
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.fieldCaps({
  2. index: "my-index-*",
  3. fields: "rating",
  4. index_filter: {
  5. range: {
  6. "@timestamp": {
  7. gte: "2018",
  8. },
  9. },
  10. },
  11. });
  12. console.log(response);

コンソール

  1. POST my-index-*/_field_caps?fields=rating
  2. {
  3. "index_filter": {
  4. "range": {
  5. "@timestamp": {
  6. "gte": "2018"
  7. }
  8. }
  9. }
  10. }

この場合、提供されたフィルターをmatch_noneに書き換えるインデックスは、応答からフィルタリングされます。

フィルタリングは最善の努力に基づいて行われ、インデックス統計とマッピングを使用して、リクエストを完全に実行するのではなく、match_noneにクエリを書き換えます。たとえば、rangeクエリがdateフィールドに対してmatch_noneに書き換えられる場合、すべてのドキュメントが提供された範囲の外にある場合(削除されたドキュメントを含む)。ただし、すべてのクエリがmatch_noneに書き換えられるわけではないため、このAPIは提供されたフィルターがドキュメントに一致しない場合でもインデックスを返す可能性があります。