面试题答案
一键面试实现思路
- 过滤:使用
bool
过滤器中的filter
子句,基于其他字段进行过滤。 - 聚合操作:
- 对于嵌套文档中的数值字段,需要使用
nested
聚合来深入嵌套文档层级。 - 在
nested
聚合内部,针对不同的数值字段分别使用sum
和max
聚合。
- 对于嵌套文档中的数值字段,需要使用
- 排序:使用
sort
子句,按照特定字段进行排序展示。
DSL 示例
假设文档结构如下:
{
"user": "John Doe",
"nested_field": [
{
"value1": 10,
"value2": 20,
"filter_field": "some_value"
},
{
"value1": 15,
"value2": 25,
"filter_field": "some_value"
}
]
}
DSL 如下:
{
"query": {
"bool": {
"filter": [
{
"term": {
"filter_field": "some_value"
}
}
]
}
},
"aggs": {
"nested_agg": {
"nested": {
"path": "nested_field"
},
"aggs": {
"sum_value1": {
"sum": {
"field": "nested_field.value1"
}
},
"max_value2": {
"max": {
"field": "nested_field.value2"
}
}
}
}
},
"sort": [
{
"user": {
"order": "asc"
}
}
]
}
在上述示例中:
query.bool.filter
部分基于filter_field
进行过滤。aggs.nested_agg
使用nested
聚合深入nested_field
嵌套层级。aggs.nested_agg.aggs.sum_value1
和aggs.nested_agg.aggs.max_value2
分别对nested_field
中的value1
和value2
字段进行求和与求最大值操作。sort
部分按照user
字段升序排序。实际应用中,sort
字段可根据需求替换为特定字段。