在单个_type中显示聚合中的所有存储区,其中一个索引包含多个具有相同字段名称的_type

时间:2015-10-21 07:00:44

标签: elasticsearch

我创建了一个名为" electronics"的索引。我在索引中创建了两个_type,即" mobiles"," laptops"它们有共同的字段名称"屏幕大小"。

由于我需要显示字段中存在的所有术语的构面,因此我使用聚合来生成术语及其方面。

{
  "aggs": {
    "distinct_field": {
      "terms": {
        "field": "screensize",
        'min_doc_count': 0,
        'size': 0
      }
    }
  }
} 

在回复中,我使用_type手机和笔记本电脑获得所有屏幕尺寸(因为lucene将来自不同类型的相同字段名称视为单个字段。)。即使他们的数量为0,我也只需要手机中的条款。

我想在进行聚合之前对mobiles _type进行过滤查询,但结果仍然相同。

{
  "query": {
    "filtered": {
      "filter": {
        "type": {
          "value": "mobiles"
        }
      }
    }
  },
  "aggs": {
    "distinct_field": {
      "terms": {
        "field": "screensize",
        'min_doc_count': 0,
        'size': 0
      }
    }
  }
}

有什么方法可以只为特定字段的单个_type获取条款?

1 个答案:

答案 0 :(得分:0)

我建议使用terms聚合与script代替field这样的另一种方法。如果文档的typemobilesnull,则脚本仅返回屏幕大小的值。这应该有用,试一试:

{
  "aggs": {
    "distinct_field": {
      "terms": {
        "script": "doc._type.value == 'mobiles' ? doc.screensize.value : null",
        "min_doc_count": 0,
        "size": 0
      }
    }
  }
}

为此,您还需要确保scripting is enabled