使用elasticsearch匹配所有嵌套对象

2024-01-08

有没有办法让elasticsearch只返回具有以下内容的文档all他们的嵌套对象符合某些标准吗?假设我有以下人为的示例:

"mappings": {                                                                                                                                                            
  "person": {                                                                                                                                                            
    "properties": {                                                                                                                                                      
      "name": { "type": "string" },                                                                                                                                       
      "other_info": ...                                                                                                                                                  

      "pet": {                                                                                                                                                      
        "type": "nested",                                                                                                                                                 
        "properties": {                                                                                                                                                  
          "gender": { "type": "string" },                                                                                                                                 
          "age": { "type": "integer" },                                                                                                                                   
          "name": { "type": "string" },                                                                                                                                   
          "other_info": ...                                                                                                                                              
        }                                                                                                                                                                
      }                                                                                                                                                                  
    }                                                                                                                                                                    
  }                                                                                                                                                                      
}    

在这种情况下,我将如何搜索养有宠物的人all年龄大于 5 岁?我还想搜索与宠物无关的其他属性,但为了简单起见,我们假设不是这样。如果一个人养了三只宠物,但其中只有一两只超过 5 岁,我不希望它成为搜索结果。


我找不到任何有关如何执行此操作的信息,因此我考虑了一个我不太喜欢的替代解决方案。不要使用嵌套文档,而是为宠物建立一个单独的索引,并将人员 ID 作为属性(可能带有_parent场地?)。然后我可以执行以下操作:

  • 搜索5岁以上的宠物,得到结果宠物列表
  • 在应用程序端,按人员 ID 对列表中的宠物进行分组
  • 计算每组中的宠物数量,如果与该人拥有的宠物总数相匹配,则将该人 ID 添加到列表中
  • 根据 ID 以及我想要检查的任何其他特定于人员的属性对人员索引进行另一次搜索

不过,这似乎是一种非常迂回的方式,而且如果我走这条路,我需要在查询人员索引之前知道每个人拥有的宠物总数(比如将其存储为每个宠物的属性,但是这只会让事情变得非常混乱)或者通过搜索所有拥有至少一只匹配宠物的人,并将宠物数量提前存储在人员索引中(或使用脚本过滤器 https://stackoverflow.com/questions/15543308/elasticsearch-filtering-by-the-size-of-a-field-that-is-an-array?),然后检查计数是否匹配。

我碰到这个 github 问题 https://github.com/elasticsearch/elasticsearch/issues/3022#issuecomment-18705079(添加“每次点击返回匹配的嵌套内部对象”功能)这确实很有用,但不幸的是它尚未实现。

当然有更好的方法来做到这一点吗?


为什么不使用一个must_not条款。如果我是你,我会搜索养有 5 岁以上宠物的人bool过滤器must_not搜索养有 5 岁以下宠物的人的子句。

像这样:

"filter" : {
    "bool" : {
        "must" : {
            "nested" : {
                "path" : "person.pet",
                "filter" : {
                    "range" : {
                        "person.pet.age" : { "from" : 5 }
                    }
                } 
            }
        },
        "must_not" : {
            "nested" : {
                "filter" : {
                    "range" : {
                        "person.pet.age" : { "lte" : 5 }
                    }
                } 
            }
        }
    }
}

我在这里所做的首先是收集所有至少拥有一只 5 岁以上宠物的人(其中包括拥有多只宠物的人,其中一些宠物还很小)。然后,我排除所有养有 5 岁或以下宠物的人,留下所需的结果。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用elasticsearch匹配所有嵌套对象 的相关文章

随机推荐

  • ANDROID:不同尺寸的ImageView

    我是 android studio 的新手 因此 如果问题很琐碎 请原谅 我的问题是理解布局 我的布局和相应的值文件夹如下所示 我的问题是没有选择正确的布局 例如 对于 Nexus 4 4 7 英寸 768x1280 xhdpi 在横向模式
  • R Shiny:删除 ggplot2 背景以使其透明

    我想让 R Shiny Server 上的 ggplots 透明 我的绘图 ui R 如下 plotOutput malPie width 95 在 server R 中我的绘图函数如下 c lt ggplot dataFrame aes
  • 在pentaho中休息客户端

    我对 pentaho 数据集成工具非常陌生 我想从我的 pentaho 中使用一个安静的服务 post web 服务 为此 我发现我应该使用休息客户端 但是当我给出网址和正文 因为我想使用后期服务 时 它并没有在数据库中进行必要的更改 谁能
  • Moment.js 包含日期格式中间的文本

    我的格式为 2015 年 1 月 27 日上午 8 17 我需要使用 moment js 显示它 我正在使用格式 moment format MMM D YYYY at h mm A z 除了 at 这个词之外 一切都很好 我怎样才能让这个
  • 在oracle中创建密码字段

    安全外部密码存储 有什么用 我可以使用 安全外部密码存储 在 Oracle 表中创建密码字段吗 或者如何在不使用 安全外部密码存储 的情况下在 Oracle 表中创建密码字段 一种不使用 安全外部密码存储 无论是什么 的方法是将 RAW 1
  • 休眠级联持续

    我有一个关于 Hibernate 的一般性问题正在解决 我有 A 类和 B 类 其中 B 依赖于 A 在我的代码中 当我调用 em persist objOfTypeA 时 我希望插入并插入到表 AAA 和 BBB 中 如果我手动保留 A
  • Powershell:递归移动文件

    我正在尝试将所有构建输出文件和文件夹复制到Bin文件夹 输出目录 Bin 除了一些保留在输出目录 The Bin文件夹永远不会被删除 初始条件 Output config log4net file1 txt file2 txt file3
  • 删除 R 图形设备中的所有边距

    所以我在摆脱图形设备的整个边距时遇到了一些麻烦 我已将 mar 设置为 0 但边缘周围仍然存在一些持久空间 例如 plot new par mar c 0 0 0 0 plot window c 0 1 c 0 1 points c 1 1
  • 如何使用 foreachPartition 在 Spark 中为每个分区高效构建一个 ML 模型?

    我正在尝试为数据集的每个分区拟合一个 ML 模型 但我不知道如何在 Spark 中执行此操作 我的数据集基本上是这样的按公司划分 Company Features Target A xxx 0 9 A xxx 0 8 A xxx 1 0 B
  • C2DM实现PHP代码

    我正在创建使用 C2DM 推送通知的 Android 应用程序 但我在创建 php 代码以使用 c2dm 发送消息时遇到问题 请指导我如何使用 php 代码发送消息 实际上存在一个问题 即如何获取客户端身份验证令牌 我见过http code
  • ASP.NET MVC:如何设置 web.config 进行 LDAP 身份验证?

    我有一个正在运行的 LDAP 服务器 其参数如下 OU users OU mydomain O this domain LDAP myhost 389 I 成功地 access 使用通用 LDAP 客户端 就像 Jarek Gawor 的
  • 在 LINQ 中实现“不在”(又名“不存在”)逻辑

    Setup 我有两个List
  • Objective C 的 iPhone 开发中的“委托”是什么? [复制]

    这个问题在这里已经有答案了 Objective C 的 iPhone 开发中的 委托 是什么 委托是一个指向对象的指针 该对象具有委托持有者知道如何调用的一组方法 换句话说 就是启用特定回调的机制来自后来创建的对象 A 很好的例子是UIAl
  • 过滤二维数组并从中间返回坐标

    我有一个由零组成的二维数组 在 1 6 和 2 7 处有一些正整数 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0
  • Laravel 4 控制器测试 - 太多 $this->call() 后出现 ErrorException - 为什么?

    我非常感谢有关我遇到的 Laravel 4 问题的帮助 我正在测试控制器路由 特别是负责路由调查问卷响应的控制器 我正在测试以下场景 用户尝试跳过问题 用户请求不存在的问题 等等 到目前为止 我为所有场景编写的测试都可以使用 PHPunit
  • Skipgrams 上下文(kwic)中的关键字?

    我使用 Quanteda 对 ngram 和 token 进行上下文分析中的关键字 效果很好 我现在想对skipgrams 执行此操作 捕获 进入障碍 的上下文以及 和 进入障碍 下面的代码是一个空的 kwic 对象 但我不知道我做错了什么
  • 从 PERL LibXML 解析器获取完整的 XML 字符串

    我有以下需要处理的 XML table table
  • 仅使用 GitHub Actions 在特定分支上运行作业

    我对 GitHub Actions 比较陌生 我有 2 份工作 一份运行我的测试 另一份将我的项目部署到服务器上 显然 我希望测试在每个分支上运行 但是只有当某些内容被推送到 master 时才应该进行部署 我正在努力寻找一种在特定分支上运
  • Pandas - 查找并迭代多列中具有匹配值的行,并将另一列中的值相乘

    这个问题是我的进一步的进步前一个 https stackoverflow com questions 51808294 pandas find rows with matching values in two columns and mul
  • 使用elasticsearch匹配所有嵌套对象

    有没有办法让elasticsearch只返回具有以下内容的文档all他们的嵌套对象符合某些标准吗 假设我有以下人为的示例 mappings person