2013-06-04 222 views
2

我有一個ES文檔,其中包括以下字段「buydatefield」,「itemboughtfield」。如何在彈性搜索的一個領域然後另一個領域?

如何製作ES查詢,以便我可以在日期上獲得方面,然後購買物品?

{ 
"query":{"match_all":{} 
}, 
"facets": { 
    "buydateFacet": { 
    "terms": { 
     "field": "buydatefield", 
     "all_terms": true 
    } 
    }, 
    "itemboughtFacet": { 
    "terms": { 
     "field": "itemboughtfield", 
     "all_terms": true 
    } 

    } 
} 

} 

上面爲buyFacet和itemboughtFacet返回了兩個單獨的構面。我想要的是在每個日期的「子面」中,對於該日期所有「購買的物品」都有一個嵌套計數。這可能嗎?如果是這樣,怎麼樣?

我想一些輸出,例如:

terms: [{ 
    term: "Bannana", 
    // total: 11 bannanas 
    buydates:{ 
    // 5/31/2013 bought 5 bannana 
    // 6/2/2013 bought 6 bannana 
    } 
}, 
{ 
    term: "Apple", 
    // total: 3 apples 
    buydates:{ 
    // 5/30/2013 bought 2 apple 
    // 6/1/2013 bought 1 apple 
    } 
}, 

] 

而且,是有可能指定面的日期範圍?

回答

1

關於第一個問題 - 子刻面:

Solr中4,它被稱爲小關節的樞轉 - 最後我檢查沒有在羣集配置中的工作,雖然。

我相信它是Lucene4規範的一部分,ES剛剛推出了0.9。

這是一個經常被要求的功能:例如:http://elasticsearch-users.115913.n3.nabble.com/Pivot-facets-td2981519.html

然而支點刻面往往是相當緩慢。

爲了您的使用情況,你可以添加一個字段是一個字符(管道|)連接在一起的兩個詞之間,然後面在該場 - 然後在前端解析hirerarchy和顯示器用戶。

然而,你所做的是在財政上增加獨特的實體數量,這會損害性能。

1

如果buydatefield被索引爲日期字段,您可以使用elasticfacets(揭示:作者是我的前導)的FacetedDateHistogram。它給了你一個「雙層」的方面:頂層相當於內置日期直方圖,但在每個桶中,你可以放置任何你喜歡的其他方面,它只對那個桶中的值進行操作(在這裏你可以定義面對購買的物品)。

這會不會給你在你的例子說明什麼挺,而是:

"buydatefacet": { 
    "_type": "faceted_date_histogram", 
    "entries": [ 
    { 
     "time": 1356994800000, // buy date 25/01/2013 
     "facet": { 
     "_type": "terms", 
     "terms": [ 
      { "term": "apple", "count": 3 }, 
      { "term": "banana", "count": 1 } 
     ], 
     "missing": 0, 
     "total": 4, 
     "other": 0 
     } 
    }, 
    { ... more days here ... } 
    ] 
} 

當ES 1.0命中會有某種更一般內置在這樣嵌套方面的支持,不限於頂級日期直方圖(they're renaming the notion to "Aggregations")。