获取嵌套字段的最大值小于参数值的项目
Get items whose maximal values of nested field less than a parameter value
我在 elasticsearch 中有以下映射:
"mappings": {
"company": {
"properties": {
"name": {
"type": "keyword"
},
"employee": {
"type": "object",
"properties": {
"age": {
"type": "long"
}
}
}
}
}
}
我想知道是否有可能获得员工年龄最大值小于 30 岁的所有公司。在 SQL 中,我只需要 select 公司同时加入员工和按公司 ID 分组并创建年龄最大值小于 30 的 where 子句。
对于您的情况,这很容易。因为你永远不会得到重复的公司的回报,因为你只有每个公司的文件,你可以直接搜索。示例:
GET yourindex/_search
{
"query": {
"bool": {
"must_not": [
{"range": {
"employee.age": {
"gt": 30
}
}}
]
}
}
}
值得注意的是,如果您想进行合并员工字段的搜索,您可以 运行 进入问题。例如,如果您要搜索所有拥有 age < 30 AND gender=MALE
员工的公司,此模型将失效。默认情况下 ElasticSearch 将所有字段视为独立的。这意味着该查询将 return 任何至少拥有一名男性员工和一名 30 岁以下员工的公司。你无法说他们一定是同一个人。如果您需要执行这些类型的查询,则需要查看 嵌套 映射和查询,这会稍微改变上面的查询。
详情:
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html
我在 elasticsearch 中有以下映射:
"mappings": {
"company": {
"properties": {
"name": {
"type": "keyword"
},
"employee": {
"type": "object",
"properties": {
"age": {
"type": "long"
}
}
}
}
}
}
我想知道是否有可能获得员工年龄最大值小于 30 岁的所有公司。在 SQL 中,我只需要 select 公司同时加入员工和按公司 ID 分组并创建年龄最大值小于 30 的 where 子句。
对于您的情况,这很容易。因为你永远不会得到重复的公司的回报,因为你只有每个公司的文件,你可以直接搜索。示例:
GET yourindex/_search
{
"query": {
"bool": {
"must_not": [
{"range": {
"employee.age": {
"gt": 30
}
}}
]
}
}
}
值得注意的是,如果您想进行合并员工字段的搜索,您可以 运行 进入问题。例如,如果您要搜索所有拥有 age < 30 AND gender=MALE
员工的公司,此模型将失效。默认情况下 ElasticSearch 将所有字段视为独立的。这意味着该查询将 return 任何至少拥有一名男性员工和一名 30 岁以下员工的公司。你无法说他们一定是同一个人。如果您需要执行这些类型的查询,则需要查看 嵌套 映射和查询,这会稍微改变上面的查询。
详情: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html