エイリアスフィールドタイプ

alias マッピングは、インデックス内のフィールドの別名を定義します。エイリアスは、search リクエストや、field capabilities のような他の選択された API のターゲットフィールドの代わりに使用できます。

Python

  1. resp = client.indices.create(
  2. index="trips",
  3. mappings={
  4. "properties": {
  5. "distance": {
  6. "type": "long"
  7. },
  8. "route_length_miles": {
  9. "type": "alias",
  10. "path": "distance"
  11. },
  12. "transit_mode": {
  13. "type": "keyword"
  14. }
  15. }
  16. },
  17. )
  18. print(resp)
  19. resp1 = client.search(
  20. query={
  21. "range": {
  22. "route_length_miles": {
  23. "gte": 39
  24. }
  25. }
  26. },
  27. )
  28. print(resp1)

Ruby

  1. response = client.indices.create(
  2. index: 'trips',
  3. body: {
  4. mappings: {
  5. properties: {
  6. distance: {
  7. type: 'long'
  8. },
  9. route_length_miles: {
  10. type: 'alias',
  11. path: 'distance'
  12. },
  13. transit_mode: {
  14. type: 'keyword'
  15. }
  16. }
  17. }
  18. }
  19. )
  20. puts response
  21. response = client.search(
  22. body: {
  23. query: {
  24. range: {
  25. route_length_miles: {
  26. gte: 39
  27. }
  28. }
  29. }
  30. }
  31. )
  32. puts response

Js

  1. const response = await client.indices.create({
  2. index: "trips",
  3. mappings: {
  4. properties: {
  5. distance: {
  6. type: "long",
  7. },
  8. route_length_miles: {
  9. type: "alias",
  10. path: "distance",
  11. },
  12. transit_mode: {
  13. type: "keyword",
  14. },
  15. },
  16. },
  17. });
  18. console.log(response);
  19. const response1 = await client.search({
  20. query: {
  21. range: {
  22. route_length_miles: {
  23. gte: 39,
  24. },
  25. },
  26. },
  27. });
  28. console.log(response1);

コンソール

  1. PUT trips
  2. {
  3. "mappings": {
  4. "properties": {
  5. "distance": {
  6. "type": "long"
  7. },
  8. "route_length_miles": {
  9. "type": "alias",
  10. "path": "distance"
  11. },
  12. "transit_mode": {
  13. "type": "keyword"
  14. }
  15. }
  16. }
  17. }
  18. GET _search
  19. {
  20. "query": {
  21. "range" : {
  22. "route_length_miles" : {
  23. "gte" : 39
  24. }
  25. }
  26. }
  27. }
ターゲットフィールドへのパス。これは、親オブジェクトを含む完全なパスである必要があります。
(例:object1.object2.field)。

検索リクエストのほぼすべてのコンポーネントは、フィールドエイリアスを受け入れます。特に、エイリアスはクエリ、集計、ソートフィールドで使用でき、docvalue_fieldsstored_fields、提案、ハイライトをリクエストする際にも使用できます。スクリプトもフィールド値にアクセスする際にエイリアスをサポートします。例外については、サポートされていないAPIのセクションを参照してください。

検索リクエストの一部やフィールド機能をリクエストする際に、フィールドワイルドカードパターンを提供できます。この場合、ワイルドカードパターンは具体的なフィールドに加えてフィールドエイリアスにも一致します:

Python

  1. resp = client.field_caps(
  2. index="trips",
  3. fields="route_*,transit_mode",
  4. )
  5. print(resp)

Ruby

  1. response = client.field_caps(
  2. index: 'trips',
  3. fields: 'route_*,transit_mode'
  4. )
  5. puts response

Js

  1. const response = await client.fieldCaps({
  2. index: "trips",
  3. fields: "route_*,transit_mode",
  4. });
  5. console.log(response);

コンソール

  1. GET trips/_field_caps?fields=route_*,transit_mode

エイリアスターゲット

エイリアスのターゲットにはいくつかの制限があります:

  • ターゲットは具体的なフィールドでなければならず、オブジェクトや他のフィールドエイリアスではありません。
  • ターゲットフィールドは、エイリアスが作成される時点で存在している必要があります。
  • ネストされたオブジェクトが定義されている場合、フィールドエイリアスはそのターゲットと同じネストされたスコープを持たなければなりません。

さらに、フィールドエイリアスは1つのターゲットのみを持つことができます。これは、単一のクローズ内で複数のターゲットフィールドに対してフィールドエイリアスを使用することができないことを意味します。

エイリアスは、マッピングの更新を通じて新しいターゲットを参照するように変更できます。既知の制限は、保存されたパーカレータークエリにフィールドエイリアスが含まれている場合、それらは依然として元のターゲットを参照することです。詳細は、パーカレーターのドキュメントを参照してください。

サポートされていないAPI

フィールドエイリアスへの書き込みはサポートされていません:インデックスまたは更新リクエストでエイリアスを使用しようとすると、失敗します。同様に、エイリアスはcopy_toのターゲットやマルチフィールドとして使用できません。

エイリアス名はドキュメントソースに存在しないため、ソースフィルタリングを実行する際にエイリアスを使用することはできません。たとえば、次のリクエストは_sourceに対して空の結果を返します:

Python

  1. resp = client.search(
  2. query={
  3. "match_all": {}
  4. },
  5. source="route_length_miles",
  6. )
  7. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. match_all: {}
  5. },
  6. _source: 'route_length_miles'
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.search({
  2. query: {
  3. match_all: {},
  4. },
  5. _source: "route_length_miles",
  6. });
  7. console.log(response);

コンソール

  1. GET /_search
  2. {
  3. "query" : {
  4. "match_all": {}
  5. },
  6. "_source": "route_length_miles"
  7. }

現在、検索およびフィールド機能APIのみがフィールドエイリアスを受け入れ、解決します。フィールド名を受け入れる他のAPI(例:term vectors)は、フィールドエイリアスと一緒に使用できません。

最後に、termsgeo_shapemore_like_thisのような一部のクエリは、インデックスされたドキュメントからクエリ情報を取得することを許可します。ドキュメントを取得する際にフィールドエイリアスがサポートされていないため、ルックアップパスを指定するクエリの部分は、エイリアスでフィールドを参照することはできません。