2016-10-21 140 views

回答

1

Elasticsearch是不完全是一個數據庫,它是一個搜索引擎,因此它支持非常有限JOIN操作(parent-child queries)。

如果你想執行上面的查詢,那麼你將不得不重做模式並嘗試將數據放在一個索引中(即使它不在2NF/3NF中也沒關係)。也許你可以將store_id與每個產品文檔一起編入索引。

現在,回到查詢,如果你想解決上面的查詢讓我們說一個索引,那麼你可以使用TERMS aggregation做到這一點。它會給你按商店編號分組的產品計數,請求將如下所示:

$ curl -XPOST 'http://localhost:9200/products/_search?search_type=count' -d '{ 
    "query" : { 
     "filtered" : { 
     "filter" : { 
      "bool" : { 
       "must" : [ 
        { "term" : {"product_type" : "sometype"}} 
       ] 
      } 
     } 
     } 
    }, 
    "aggs" : { 
     "products" : { 
      "terms" : { 
       "field" : "store_id" 
      } 
     } 
    } 
}'