elasticsearch - Elasticsearch - 如何过滤嵌套对象列表
问题描述
我有一个对象列表,我只需要根据他孩子的值获取对象,例如,给定下面的示例,我如何才能只检索一些孩子的年龄大于给定年龄参数的人?
hits:[
person:{
value1: "something",
value2: "something",
children: [
{age:18},
{age:20}
]
}]
我尝试了一些查询上下文但没有成功:
{
"min_score": 0.1,
"query": {
"function_score": {
"functions": [
{
"script_score": {
"script": {
"source": """
if (params["_source"]["children"][0]['age'] === params.age) {
return 1;
}else{
return 0;
""",
"params": {
"age": "20"
}
}
}
}
]
}
}
}
解决方案
您将需要一个nested
数据类型映射和一个嵌套查询来配合它。
基本映射:
PUT persons
{
"mappings": {
"properties": {
"person": {
"type": "object",
"properties": {
"children": {
"type": "nested"
}
}
}
}
}
}
插入的人:
POST persons/_doc
{
"person": {
"value1": "something",
"value2": "something",
"children": [
{
"age": 18
},
{
"age": 20
}
]
}
}
搜索确切年龄为 20 岁的儿童:
GET persons/_search
{
"query": {
"nested": {
"path": "person.children",
"query": {
"term": {
"person.children.age": {
"value": 20
}
}
}
}
}
}
您还可以使用== == 20的范围查询。gte
lte
推荐阅读
- flutter - 向上滑动刷新 Flutter FUTUREBUILDER
- android - 在 Flutter 类中使用 Future 整数
- python - 将 pandas 列 datetime64 的时区从 UTC 转换为 America/New_York
- java - 反序列化对象时,Apache Camel 抛出异常:com.fasterxml.jackson.core.JsonParseException: Unrecognized token
- python - 如何在不使用回调函数的情况下用输入框定义全局变量?
- windows - 如何对文件夹中的所有子目录执行 git pull?(在 Windows 中)
- c - 函数定义中函数声明的目的
- java - 使用 CommandLineRunner 安装 Maven
- java - Web3j 是否需要使用端口转发?
- c# - 如何返回主菜单并将列表分列?