2013-12-17 117 views
1

我有我想要運行在ElasticSearch在聚合查詢以下JSON結構:ElasticSearch聚合查詢可能嗎?

{ 
    "user_id": 1, 
    "gender_id": 1, 
    "locale_id": 6, 
    "age": 38, 
    "hometown_city_id": 1002, 
    "current_city_id": 672, 
    "books": [ 
     { 
      "b_id": 2065, 
      "b_name": "aut qui assumenda ut", 
      "b_cat": 56 
     }, 
     { 
      "b_id": 2527, 
      "b_name": "libero et laudantium", 
      "b_cat": 132 
     }, 
     ... 
    ] 
} 

我基本上想要做的就是爲例子來說明前5本書與「gender_id」用戶:「 1「(男)已閱讀,其中也讀有」b_id「的書:2065.

作爲ElasticSearch的初學者我還沒有遇到過解決方案。我知道有v1.0的aggegation模塊(https://github.com/elasticsearch/elasticsearch/issues/3300),但我無法運行。

如果有人已經實現了類似的東西,請幫助!提前感謝!

+0

我認爲你需要創建一個過濾器(gender_id和b_id)並讓elasticsearch在書上創建一個方面。 – phoet

回答

0

感謝@mconlin的提示。我得到它的工作的查詢如下:

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "and" : [ 
        { "term": { "gender_id": 1 } }, 
        { "term": { "books.b_id": 2065} } 
       ] 
      } 
     } 
    }, 
    "facets": { 
     "book_cnt": { 
      "terms": { 
       "field": "books.b_id", 
       "size": 5 
      } 
     } 
    } 
} 

原來這是更好地使用過濾器在查詢本身,而不是作爲一個單獨的方面。

1

也許這樣的事情(約嵌套books.field不知道):

{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "facets" : { 
     "filter_one" : { 
      "filter" : { 
       "and" : [ 
         {"filter" : {"term" : { "gender_id" : 1 }}, 
         {"filter" : {"term" : { "books.b_id" : 2065 }}, 
       ] 
      } 
     }, 
     "book_cnt" : { 
      "terms" : { 
       "field" : "books.b_name", 
       "size" : 5 
      } 
     } 
    } 
}