_index 字段编辑

在跨多个索引执行查询时,有时需要添加与特定索引的文档相关的查询子句。 _index 字段允许匹配文档索引的索引。它的值可以在某些查询和聚合中访问,以及在排序或脚本中访问。

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
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 索引中。这意味着您可以在 termterms 查询(或任何被重写为 term 查询的查询,例如 matchquery_stringsimple_query_string 查询)中使用 _index 字段,以及 prefixwildcard 查询。但是,它不支持 regexpfuzzy 查询。

_index 字段的查询除了具体的索引名称外,还接受索引别名。

当指定远程索引名称(例如 cluster_1:index_3)时,查询必须包含分隔符字符 :。例如,对 cluster_*:index_3wildcard 查询将匹配来自远程索引的文档。但是,对 cluster*index_1 的查询只匹配本地索引,因为没有分隔符。此行为与远程索引名称的通常解析规则一致。