_index field
複数のインデックスにまたがるクエリを実行する際、特定のインデックスに関連するドキュメントにのみ関連するクエリ句を追加することが望ましい場合があります。_index
フィールドは、ドキュメントがインデックスされたインデックスに基づいて一致させることを可能にします。その値は、特定のクエリや集計、並べ替えやスクリプトでアクセス可能です。
Python
resp = client.index(
index="index_1",
id="1",
document={
"text": "Document in index 1"
},
)
print(resp)
resp1 = client.index(
index="index_2",
id="2",
refresh=True,
document={
"text": "Document in index 2"
},
)
print(resp1)
resp2 = client.search(
index="index_1,index_2",
query={
"terms": {
"_index": [
"index_1",
"index_2"
]
}
},
aggs={
"indices": {
"terms": {
"field": "_index",
"size": 10
}
}
},
sort=[
{
"_index": {
"order": "asc"
}
}
],
script_fields={
"index_name": {
"script": {
"lang": "painless",
"source": "doc['_index']"
}
}
},
)
print(resp2)
Ruby
response = client.index(
index: 'index_1',
id: 1,
body: {
text: 'Document in index 1'
}
)
puts response
response = client.index(
index: 'index_2',
id: 2,
refresh: true,
body: {
text: 'Document in index 2'
}
)
puts response
response = client.search(
index: 'index_1,index_2',
body: {
query: {
terms: {
_index: [
'index_1',
'index_2'
]
}
},
aggregations: {
indices: {
terms: {
field: '_index',
size: 10
}
}
},
sort: [
{
_index: {
order: 'asc'
}
}
],
script_fields: {
index_name: {
script: {
lang: 'painless',
source: "doc['_index']"
}
}
}
}
)
puts response
Js
const response = await client.index({
index: "index_1",
id: 1,
document: {
text: "Document in index 1",
},
});
console.log(response);
const response1 = await client.index({
index: "index_2",
id: 2,
refresh: "true",
document: {
text: "Document in index 2",
},
});
console.log(response1);
const response2 = await client.search({
index: "index_1,index_2",
query: {
terms: {
_index: ["index_1", "index_2"],
},
},
aggs: {
indices: {
terms: {
field: "_index",
size: 10,
},
},
},
sort: [
{
_index: {
order: "asc",
},
},
],
script_fields: {
index_name: {
script: {
lang: "painless",
source: "doc['_index']",
},
},
},
});
console.log(response2);
Console
PUT index_1/_doc/1
{
"text": "Document in index 1"
}
PUT index_2/_doc/2?refresh=true
{
"text": "Document in index 2"
}
GET index_1,index_2/_search
{
"query": {
"terms": {
"_index": ["index_1", "index_2"]
}
},
"aggs": {
"indices": {
"terms": {
"field": "_index",
"size": 10
}
}
},
"sort": [
{
"_index": {
"order": "asc"
}
}
],
"script_fields": {
"index_name": {
"script": {
"lang": "painless",
"source": "doc['_index']"
}
}
}
}
_index フィールドでのクエリ |
|
_index フィールドでの集計 |
|
_index フィールドでの並べ替え |
|
スクリプト内での _index フィールドへのアクセス |
_index
フィールドは仮想的に公開されており、実際のフィールドとして Lucene インデックスに追加されていません。これは、_index
フィールドを term
または terms
クエリ(または term
クエリに書き換えられる任意のクエリ、例えば match
、query_string
または simple_query_string
クエリ)で使用できることを意味します。また、prefix
および wildcard
クエリでも使用できます。ただし、regexp
および fuzzy
クエリはサポートされていません。
_index
フィールドに対するクエリは、具体的なインデックス名に加えてインデックスエイリアスを受け入れます。
cluster_1:index_3
のようなリモートインデックス名を指定する場合、クエリには区切り文字 :
が含まれている必要があります。たとえば、cluster_*:index_3
に対する wildcard
クエリは、リモートインデックスからのドキュメントに一致します。ただし、cluster*index_1
に対するクエリは、区切りが存在しないため、ローカルインデックスにのみ一致します。この動作は、リモートインデックス名に対する通常の解決ルールと一致します。