嵌套文档看起来像这样
{
"userid": "123",
"usertag": [
{
"tag": "A",
"logcreatetime": "2017-01-14"
},
{
"tag": "C",
"logcreatetime": "2017-01-17"
}
]
},
{
"userid": "456",
"usertag": [
{
"tag": "A",
"logcreatetime": "2017-01-12"
},
{
"tag": "B",
"logcreatetime": "2017-01-19"
}
]
},
.....
usertag对象是嵌套映射, 如何在2017-01-12到2017-01-19之间获得用户ID,是否有标签A和B? 谢谢 对不起我的英文。
答案 0 :(得分:1)
我假设您已将logcreatetime
编入索引作为日期字段,因此您可以使用以下查询:
curl -XGET http://localhost:9200/my_users/_search -d '
{
"query": {
"bool": {
"must": [ {
"nested": {
"path": "usertag",
"query": {
"bool": {
"must": [
{ "match": { "usertag.tag": "A" }},
{ "range" : {
"usertag.logcreatetime" : {
"gte": "2017-01-12",
"lte": "2017-01-19"
}
}}
]
}
}
}
}, {
"nested": {
"path": "usertag",
"query": {
"bool": {
"must": [
{ "match": { "usertag.tag": "B" }},
{ "range" : {
"usertag.logcreatetime" : {
"gte": "2017-01-12",
"lte": "2017-01-19"
}
}}
]
}
}
}
}]
}
}
}'
语法的局限性在于,您可以查找特定的子项,其中特定tag
及其logcreatetime
位于给定范围内。但为了确保您有两个孩子,您应该将两个嵌套查询合并到顶级bool
的2个必须子句中。