2016-11-09 56 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