我有类似的记录
{
"who": "John",
"hobby": [
{"name": "gardening",
"skills": 2
},
{"name": "sleeping",
"skills": 3
},
{"name": "darts",
"skills": 2
}
]
}
,
{
"who": "Mary",
"hobby": [
{"name": "gardening",
"skills": 2
},
{"name": "volleyball",
"skills": 3
},
{"name": "kung-fu",
"skills": 2
}
]
}我正在构建一个查询,该查询将回答以下问题:“我们对skills=2有多少爱好?”
上面的例子的答案是3 ("gardening"对两者来说都是通用的,而且每一个都有另一个唯一的)。
我尝试过的每一个"query"或"query"+"aggs"都在['hits']['hits']或"aggs"中返回,每个都满足查询的要求)。
是否有一种方法可以构建一个查询,以便返回字段总数(在上面的示例中:与该查询相匹配的列表"hobby"**)元素?**(字段,而不是文档)
注:如果我的文件是平的:
{"who": "John", "name": "gardening", "skills": 2},
{"who": "John", "name": "sleeping", "skills": 3},
(...)
{"who": "Mary", "name": "kung-fu", "skills": 2}那么一个简单的"query"来匹配"skills": 2 + "name"上的一个聚合“就可以完成这项工作。
发布于 2015-08-09 04:03:10
是的,您可以使用 type并使用inner_hits和/或 aggregations来实现这一点。
下面是您应该使用的映射:
curl -XPUT localhost:9200/hobbies -d '{
"mappings": {
"hob": {
"properties": {
"who": {
"type": "string"
},
"hobby": {
"type": "nested", <--- the hobby list is of type nested
"properties": {
"name": {
"type": "string",
"index": "not_analyzed"
},
"skills": {
"type": "integer"
}
}
}
}
}
}
}然后,我们可以使用_bulk端点插入两个示例文档,如下所示:
curl -XPOST localhost:9200/hobbies/hob/_bulk -d '
{"index":{}}
{"who":"John", "hobby":[{"name": "gardening","skills": 2},{"name": "sleeping","skills": 3},{"name": "darts","skills": 2}]}
{"index":{}}
{"who":"Mary", "hobby":[{"name": "gardening","skills": 2},{"name": "volley-ball","skills": 3},{"name": "kung-fu","skills": 2}]}
'最后,我们可以查询您的索引中有多少爱好有这样的skills: 2:
curl -XPOST localhost:9200/hobbies/hob/_search -d '{
"_source": false,
"query": {
"nested": {
"path": "hobby",
"query": {
"term": {
"hobby.skills": 2
}
},
"inner_hits": {} <---- this will return only the matching nested fields with skills=2
}
},
"aggs": {
"hobbies": {
"nested": {
"path": "hobby"
},
"aggs": {
"skills": {
"filter": {
"term": {
"hobby.skills": 2
}
},
"aggs": {
"by_field": { <--- this will return a breakdown of the fields with skills=2
"terms": {
"field": "name"
}
}
}
}
}
}
}
}'此查询将返回的内容是
hits部分中,具有skills: 2的四个字段aggs部分中,有skills: 2的三个不同字段的细分https://stackoverflow.com/questions/31895541
复制相似问题