_index field

複数のインデックスにまたがるクエリを実行する際、特定のインデックスに関連するドキュメントにのみ関連するクエリ句を追加することが望ましい場合があります。_index フィールドは、ドキュメントがインデックスされたインデックスに基づいて一致させることを可能にします。その値は、特定のクエリや集計、並べ替えやスクリプトでアクセス可能です。

Python

  1. resp = client.index(
  2. index="index_1",
  3. id="1",
  4. document={
  5. "text": "Document in index 1"
  6. },
  7. )
  8. print(resp)
  9. resp1 = client.index(
  10. index="index_2",
  11. id="2",
  12. refresh=True,
  13. document={
  14. "text": "Document in index 2"
  15. },
  16. )
  17. print(resp1)
  18. resp2 = client.search(
  19. index="index_1,index_2",
  20. query={
  21. "terms": {
  22. "_index": [
  23. "index_1",
  24. "index_2"
  25. ]
  26. }
  27. },
  28. aggs={
  29. "indices": {
  30. "terms": {
  31. "field": "_index",
  32. "size": 10
  33. }
  34. }
  35. },
  36. sort=[
  37. {
  38. "_index": {
  39. "order": "asc"
  40. }
  41. }
  42. ],
  43. script_fields={
  44. "index_name": {
  45. "script": {
  46. "lang": "painless",
  47. "source": "doc['_index']"
  48. }
  49. }
  50. },
  51. )
  52. print(resp2)

Ruby

  1. response = client.index(
  2. index: 'index_1',
  3. id: 1,
  4. body: {
  5. text: 'Document in index 1'
  6. }
  7. )
  8. puts response
  9. response = client.index(
  10. index: 'index_2',
  11. id: 2,
  12. refresh: true,
  13. body: {
  14. text: 'Document in index 2'
  15. }
  16. )
  17. puts response
  18. response = client.search(
  19. index: 'index_1,index_2',
  20. body: {
  21. query: {
  22. terms: {
  23. _index: [
  24. 'index_1',
  25. 'index_2'
  26. ]
  27. }
  28. },
  29. aggregations: {
  30. indices: {
  31. terms: {
  32. field: '_index',
  33. size: 10
  34. }
  35. }
  36. },
  37. sort: [
  38. {
  39. _index: {
  40. order: 'asc'
  41. }
  42. }
  43. ],
  44. script_fields: {
  45. index_name: {
  46. script: {
  47. lang: 'painless',
  48. source: "doc['_index']"
  49. }
  50. }
  51. }
  52. }
  53. )
  54. puts response

Js

  1. const response = await client.index({
  2. index: "index_1",
  3. id: 1,
  4. document: {
  5. text: "Document in index 1",
  6. },
  7. });
  8. console.log(response);
  9. const response1 = await client.index({
  10. index: "index_2",
  11. id: 2,
  12. refresh: "true",
  13. document: {
  14. text: "Document in index 2",
  15. },
  16. });
  17. console.log(response1);
  18. const response2 = await client.search({
  19. index: "index_1,index_2",
  20. query: {
  21. terms: {
  22. _index: ["index_1", "index_2"],
  23. },
  24. },
  25. aggs: {
  26. indices: {
  27. terms: {
  28. field: "_index",
  29. size: 10,
  30. },
  31. },
  32. },
  33. sort: [
  34. {
  35. _index: {
  36. order: "asc",
  37. },
  38. },
  39. ],
  40. script_fields: {
  41. index_name: {
  42. script: {
  43. lang: "painless",
  44. source: "doc['_index']",
  45. },
  46. },
  47. },
  48. });
  49. console.log(response2);

Console

  1. PUT index_1/_doc/1
  2. {
  3. "text": "Document in index 1"
  4. }
  5. PUT index_2/_doc/2?refresh=true
  6. {
  7. "text": "Document in index 2"
  8. }
  9. GET index_1,index_2/_search
  10. {
  11. "query": {
  12. "terms": {
  13. "_index": ["index_1", "index_2"]
  14. }
  15. },
  16. "aggs": {
  17. "indices": {
  18. "terms": {
  19. "field": "_index",
  20. "size": 10
  21. }
  22. }
  23. },
  24. "sort": [
  25. {
  26. "_index": {
  27. "order": "asc"
  28. }
  29. }
  30. ],
  31. "script_fields": {
  32. "index_name": {
  33. "script": {
  34. "lang": "painless",
  35. "source": "doc['_index']"
  36. }
  37. }
  38. }
  39. }
_index フィールドでのクエリ
_index フィールドでの集計
_index フィールドでの並べ替え
スクリプト内での _index フィールドへのアクセス

_index フィールドは仮想的に公開されており、実際のフィールドとして Lucene インデックスに追加されていません。これは、_index フィールドを term または terms クエリ(または term クエリに書き換えられる任意のクエリ、例えば matchquery_string または simple_query_string クエリ)で使用できることを意味します。また、prefix および wildcard クエリでも使用できます。ただし、regexp および fuzzy クエリはサポートされていません。

_index フィールドに対するクエリは、具体的なインデックス名に加えてインデックスエイリアスを受け入れます。

cluster_1:index_3 のようなリモートインデックス名を指定する場合、クエリには区切り文字 : が含まれている必要があります。たとえば、cluster_*:index_3 に対する wildcard クエリは、リモートインデックスからのドキュメントに一致します。ただし、cluster*index_1 に対するクエリは、区切りが存在しないため、ローカルインデックスにのみ一致します。この動作は、リモートインデックス名に対する通常の解決ルールと一致します。