如何在elasticsearch中编写此查询?

时间:2016-10-21 08:17:10

标签: mysql elasticsearch

如何在elasticsearch中编写这个mysql查询?

SELECT *,count(products.store_id)
FROM stores
INNER JOIN products
ON stores.store_id=products.store_id
group by stores.store_id;

1 个答案:

答案 0 :(得分:1)

Elasticsearch不是一个数据库,它是一个搜索引擎,因此它支持非常有限的JOIN操作(parent-child queries)。

如果要执行上述查询,则必须重新设计架构并尝试将数据放在一个索引中(即使它不在2NF / 3NF中也不重要)。也许您可以将store_id与每个产品文档一起索引。

现在,回到查询,如果你想在上面说一个索引来执行上述查询,那么你可以使用TERMS aggregation来完成。它将为您提供按商店ID分组的产品数量,请求将如下所示:

$ 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"
            }
        }
    }
}'