2016-11-09 50 views
0

我有一些关于从elasticsearch查询数据的问题。我想查询有结构如下数据如何从elasticsearch中获得一定的结果?

[ 
{ 
    name : 'myName', 
    dailyTasks : [ 
     { 
      date : '2016-01-01', 
      task : 'task1' 
     }, 
     { 
      date : '2016-01-02', 
      task : 'task2' 
     }, 
     { 
      date : '2016-01-03', 
      task : 'task3' 
     } 
    ] 
}, 
{ 
    name : 'myName1', 
    dailyTasks : [ 
     { 
      date : '2016-01-01', 
      task : 'task11' 
     }, 
     { 
      date : '2016-01-02', 
      task : 'task12' 
     }, 
     { 
      date : '2016-01-03', 
      task : 'task13' 
     } 
    ] 
} 
] 

我想知道如何得到的结果如下列:

[ 
{ 
    name : 'myName', 
    dailyTasks : [ 
     { 
      date : '2016-01-01', 
      task : 'task1' 
     }, 
     { 
      date : '2016-01-02', 
      task : 'task2' 
     } 
    ] 
} 
] 

非常感谢你。

+0

什么是您的'dailyTasks'字段的映射? – Val

+0

我只能说'dailyTasks'不是'嵌套的',但是我已经重新编制了将'dailyTasks'作为'nested'对象的索引。但我仍然无法查询我发布的结果。 – barssala

+0

'嵌套'是要走的路。然后你还需要['inner_hits'](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html#nested-inner-hits),它会起作用 – Val

回答

0

查询有什么样的逻辑? 它看起来像名字:myName1和日期<'2016-01-02'?

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "should": [ 
      {} 
      ], 
      "must": [ 
      { "term": { 
     "name": "myName" 
    } 
       "range": { 
       "date": { 
        "gte": "2016-01-01", 
        "lte": "2016-01-02" 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

但是'date'在名为'dailyTasks'的列表中,我们是否应该关注dailyTasks的引用? – barssala

+0

当然你可以写dailyTasks.date,我没有做任何测试,只是想指出如何查询。 另一种选择是先按名称筛选,然后在date /和上汇总该结果或筛选出日期范围... – HolgT