如何在elasticsearch中编写这个mysql查询?
SELECT *,count(products.store_id)
FROM stores
INNER JOIN products
ON stores.store_id=products.store_id
group by stores.store_id;
答案 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"
}
}
}
}'