エイリアスフィールドタイプ
alias
マッピングは、インデックス内のフィールドの別名を定義します。エイリアスは、search リクエストや、field capabilities のような他の選択された API のターゲットフィールドの代わりに使用できます。
Python
resp = client.indices.create(
index="trips",
mappings={
"properties": {
"distance": {
"type": "long"
},
"route_length_miles": {
"type": "alias",
"path": "distance"
},
"transit_mode": {
"type": "keyword"
}
}
},
)
print(resp)
resp1 = client.search(
query={
"range": {
"route_length_miles": {
"gte": 39
}
}
},
)
print(resp1)
Ruby
response = client.indices.create(
index: 'trips',
body: {
mappings: {
properties: {
distance: {
type: 'long'
},
route_length_miles: {
type: 'alias',
path: 'distance'
},
transit_mode: {
type: 'keyword'
}
}
}
}
)
puts response
response = client.search(
body: {
query: {
range: {
route_length_miles: {
gte: 39
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "trips",
mappings: {
properties: {
distance: {
type: "long",
},
route_length_miles: {
type: "alias",
path: "distance",
},
transit_mode: {
type: "keyword",
},
},
},
});
console.log(response);
const response1 = await client.search({
query: {
range: {
route_length_miles: {
gte: 39,
},
},
},
});
console.log(response1);
コンソール
PUT trips
{
"mappings": {
"properties": {
"distance": {
"type": "long"
},
"route_length_miles": {
"type": "alias",
"path": "distance"
},
"transit_mode": {
"type": "keyword"
}
}
}
}
GET _search
{
"query": {
"range" : {
"route_length_miles" : {
"gte" : 39
}
}
}
}
ターゲットフィールドへのパス。これは、親オブジェクトを含む完全なパスである必要があります。 (例: object1.object2.field )。 |
検索リクエストのほぼすべてのコンポーネントは、フィールドエイリアスを受け入れます。特に、エイリアスはクエリ、集計、ソートフィールドで使用でき、docvalue_fields
、stored_fields
、提案、ハイライトをリクエストする際にも使用できます。スクリプトもフィールド値にアクセスする際にエイリアスをサポートします。例外については、サポートされていないAPIのセクションを参照してください。
検索リクエストの一部やフィールド機能をリクエストする際に、フィールドワイルドカードパターンを提供できます。この場合、ワイルドカードパターンは具体的なフィールドに加えてフィールドエイリアスにも一致します:
Python
resp = client.field_caps(
index="trips",
fields="route_*,transit_mode",
)
print(resp)
Ruby
response = client.field_caps(
index: 'trips',
fields: 'route_*,transit_mode'
)
puts response
Js
const response = await client.fieldCaps({
index: "trips",
fields: "route_*,transit_mode",
});
console.log(response);
コンソール
GET trips/_field_caps?fields=route_*,transit_mode
エイリアスターゲット
エイリアスのターゲットにはいくつかの制限があります:
- ターゲットは具体的なフィールドでなければならず、オブジェクトや他のフィールドエイリアスではありません。
- ターゲットフィールドは、エイリアスが作成される時点で存在している必要があります。
- ネストされたオブジェクトが定義されている場合、フィールドエイリアスはそのターゲットと同じネストされたスコープを持たなければなりません。
さらに、フィールドエイリアスは1つのターゲットのみを持つことができます。これは、単一のクローズ内で複数のターゲットフィールドに対してフィールドエイリアスを使用することができないことを意味します。
エイリアスは、マッピングの更新を通じて新しいターゲットを参照するように変更できます。既知の制限は、保存されたパーカレータークエリにフィールドエイリアスが含まれている場合、それらは依然として元のターゲットを参照することです。詳細は、パーカレーターのドキュメントを参照してください。
サポートされていないAPI
フィールドエイリアスへの書き込みはサポートされていません:インデックスまたは更新リクエストでエイリアスを使用しようとすると、失敗します。同様に、エイリアスはcopy_to
のターゲットやマルチフィールドとして使用できません。
エイリアス名はドキュメントソースに存在しないため、ソースフィルタリングを実行する際にエイリアスを使用することはできません。たとえば、次のリクエストは_source
に対して空の結果を返します:
Python
resp = client.search(
query={
"match_all": {}
},
source="route_length_miles",
)
print(resp)
Ruby
response = client.search(
body: {
query: {
match_all: {}
},
_source: 'route_length_miles'
}
)
puts response
Js
const response = await client.search({
query: {
match_all: {},
},
_source: "route_length_miles",
});
console.log(response);
コンソール
GET /_search
{
"query" : {
"match_all": {}
},
"_source": "route_length_miles"
}
現在、検索およびフィールド機能APIのみがフィールドエイリアスを受け入れ、解決します。フィールド名を受け入れる他のAPI(例:term vectors)は、フィールドエイリアスと一緒に使用できません。
最後に、terms
、geo_shape
、more_like_this
のような一部のクエリは、インデックスされたドキュメントからクエリ情報を取得することを許可します。ドキュメントを取得する際にフィールドエイリアスがサポートされていないため、ルックアップパスを指定するクエリの部分は、エイリアスでフィールドを参照することはできません。