从ElasticSearch中的一个文档生成多个文档

时间:2018-05-07 03:03:24

标签: elasticsearch

我想在一个查询中从ES中的一个文档生成多个文档。例如:

原始文件:

"_source":{
    "name": "Name1",
    "values": [100,200,300]    
}

黄金查询的生成文档:

"_source":{
    "name": "Name1",
    "value": 100,
    "sequence":1    
}


"_source":{
    "name": "Name1",
    "value": 200,
    "sequence":2    
}


"_source":{
    "name": "Name1",
    "value": 300,
    "sequence":3   
}

我担心的是空间,我对CPU和内存都很满意。这意味着我不希望以查询的方式存储我的文档。

@val

1 个答案:

答案 0 :(得分:0)

我认为你不会找到一个查询来做你想要的。弹性存储并返回文档。您可以过滤掉您想要专门返回的有关文档的内容,但无论它返回什么,它仍将是它存储的文档。返回的结果集将实际文档作为返回的一个组成部分:

"hits": [
  {
    "_index": "test",
    "_type": "doc",
    "_id": "1",
    "_score": 0.2876821,
    "_source": {
      "name": "Name1",
      "values": [
        100,
        200,
        300
      ]
    }
  }
]

我不完全确定你的目标,但你可能得到的最接近的是对值的汇总,以显示哪些文档符合这些值。

{
  "size" : 0,
  "aggs" : {
    "values" : {
      "terms" : {
        "size" : 10,
        "field" : "values"
      },
      "aggs" : {
        "hits" : {
          "top_hits" : {}
        }
      }
    }
  }
}

问题在于top_hits并不意味着每个桶返回大的结果集,只是最相关的。因此,根据您要执行的操作,您可能需要单独存储它们,或者自己进行后期处理以创建每个值的结果。