es 竖表 关联查询
匿名 | 发布于2017年09月11日 | 阅读数:6080
1.建立了一个用户的索引,一个index,一个type,里面的数据是一对多关系,求关联聚合数据。
由于用户的特征属性,年龄,性别,爱好 等等,这类后面会给许多的特征值,是不特定的,所以没建立成一个用户一列值,而是给成了key,value 这种多列形式~
2. 如果单纬度的话, 比如,80后的人数, 过滤 80后,然后 通过value aggs 统计即可~
SELECT COUNT(1) FROM test t WHERE t.`value` ='80后' GROUP BY t.`value`;
{"size":0,"query":{{ "match": { "value": "80后" } }},"aggs":{"groupBy":{"terms":{"field":"key.keyword","order":{"_count":"desc"},"size":20}}}}
3.现在, 如果变成多维度,比如80后 切 性别为F 的用户的人数~~ 所以现在要关联用户号 usr_id~ 才能判断同时满足这个条件~
mysql 也可以写出这种~
SELECT COUNT(1) FROM
(SELECT user_id ,KEY , VALUE FROM test WHERE VALUE='F' ) a
INNER JOIN
(SELECT user_id,KEY,VALUE FROM test WHERE VALUE ='80后') b ON a.user_id = b.user_id;
请问es 中这种 有没有类似的语法?跪谢 大神指教~
由于用户的特征属性,年龄,性别,爱好 等等,这类后面会给许多的特征值,是不特定的,所以没建立成一个用户一列值,而是给成了key,value 这种多列形式~
2. 如果单纬度的话, 比如,80后的人数, 过滤 80后,然后 通过value aggs 统计即可~
SELECT COUNT(1) FROM test t WHERE t.`value` ='80后' GROUP BY t.`value`;
{"size":0,"query":{{ "match": { "value": "80后" } }},"aggs":{"groupBy":{"terms":{"field":"key.keyword","order":{"_count":"desc"},"size":20}}}}
3.现在, 如果变成多维度,比如80后 切 性别为F 的用户的人数~~ 所以现在要关联用户号 usr_id~ 才能判断同时满足这个条件~
mysql 也可以写出这种~
SELECT COUNT(1) FROM
(SELECT user_id ,KEY , VALUE FROM test WHERE VALUE='F' ) a
INNER JOIN
(SELECT user_id,KEY,VALUE FROM test WHERE VALUE ='80后') b ON a.user_id = b.user_id;
请问es 中这种 有没有类似的语法?跪谢 大神指教~
1 个回复
Cheetah
赞同来自: byyuyi
"userid" : "1",
"user" : [
{
"key" : "genner",
"value" : "F"
},
{
"key1" : "age",
"value1" : "90后"
}
]
}
查询如下:
"query": {
"bool": {
"must": [
{ "match": { "user.value": "F" }},
{ "match": { "user.value1": "90后"" }}
]
}
}
如果还想分离的话,还可以采用nested或者父子结构,不过上述结构已经满足你的需求