获取嵌套字段的最大值小于参数值的项目



我在 elasticsearch 中有以下映射:

"mappings": {
"company": {
"properties": {
"name": {
"type": "keyword"
},
"employee": {
"type": "object",
"properties": {
"age": {
"type": "long"
}
}
}
}
}
}

我想知道是否有可能让所有员工年龄最大值低于 30 的公司。在SQL中,我只需要选择公司,同时通过公司ID加入员工和组,并创建一个最大值小于30的where子句。

在您的情况下,这很容易。 由于您永远不会得到重复的公司,因为每个公司只有文档,因此您可以直接搜索。 例:

GET yourindex/_search
{
"query": {
"bool": {
"must_not": [
{"range": {
"employee.age": {
"gt": 30
}
}}
]
}
}
}

值得注意的是,如果您想进行组合员工字段的搜索,您可能会遇到问题。 例如,如果您想搜索所有有员工的公司age < 30 AND gender=MALE此模型将崩溃。 默认情况下,ElasticSearch将所有字段视为独立字段。 这意味着该查询将返回至少有一名男性员工和一名 30 岁以下员工的任何公司。 你没有办法说他们一定是同一个人。 如果需要执行这些类型的查询,则需要查看嵌套映射和查询,这会稍微更改上面的查询。

详情:https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

相关内容

最新更新