如何在 Elasticsearch 中同时按父字段和嵌套字段排序?

2024-04-21

我需要同时按父字段和嵌套字段在 Elasticsearch 中排序。我的数据是这样的:

[
    {
        "id": "1",
        "rank": 8,
        "price": 12.45,
        "offers": [
            {
                "id": "777",
                "rank": 12,
                "price": 45.75
            }
        ]
    },
    {
        "id": "2",
        "rank": 35,
        "price": 5.95,
        "offers": null
    }
]

我需要对结果进行排序rank以这样的方式,当offers不是null我应该采取嵌套offers.rank值,否则我应该带父母rank价值。 我尝试了这个脚本,但它不起作用:

    "sort": [
        {
            "_script": {
                "script": {
                    "source": "doc['offers'].size()==0 ? doc['rank'].value : doc['offers.rank'].value",
                    "lang": "painless"
                },
                "type": "number",
                "order": "asc"
            }
        }
    ]

它不起作用可能是因为offers.rank来自嵌套offers对象,该对象不可访问。但我不明白如何处理它 - 如果我为整个脚本添加嵌套条件,那么我的父值doc['rank'].value将无法再访问。可以同时按父字段和嵌套字段在这里排序吗?


您假设无法访问父级别是正确的。现在,你可以

  1. 创建 2 个单独的排序“对象”,一个用于父级,一个用于嵌套报价,然后使用排序模式 https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html#_sort_mode_option or
  2. 迭代_source反而:
{
  "sort": [
    {
      "_script": {
        "script": {
          "source": """
          if (params._source.offers instanceof ArrayList
              && params._source.offers.length > 0) {
            return params._source['offers'][0].rank;
          }
          return params._source.rank
          """,
          "lang": "painless"
        },
        "type": "number",
        "order": "asc"
      }
    }
  ]
}

请注意,由于我们正在处理“报价”ArrayList在这里,您需要某种机制来选择排名。这取决于你——我只是访问了第一个报价的排名,你可能想对数组列表进行排序并选择最高的一个......

如果您愿意的话,这里有一句:

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

如何在 Elasticsearch 中同时按父字段和嵌套字段排序? 的相关文章

  • 如何在条件持续时在Mysql中选择行

    我有这样的事情 Name Value A 10 B 9 C 8 意思是 这些值是按降序排列的 我需要创建一个新表 其中包含占总值 60 的值 所以 这可能是一个伪代码 set Total sum value set counter 0 fo
  • 如何为基于服务的数据库设置自动增量

    我在这里开始构建我的第一个本地数据库 基于服务的数据库 使用文本框将行写入基于服务的数据库 https stackoverflow com questions 39152801 write line to service based dat
  • 术语聚合仅考虑聚合的前缀

    在我的弹性搜索文档中 我有用户和他在组织中的位置的某种表示 例如 CEO的位置是1 CEO直属的为1 1 1 2 1 3等 1 1 以下的将是 1 1 1 1 1 2 1 2 3 等 我有一个聚合 我想按 VP 聚合 所以我希望每个人都低于
  • 按工作日顺序使用工作日键对数组进行排序

    我想按周的顺序对带有工作日键的数组进行排序 如下所示 星期一 星期二 星期三 星期四 星期五 星期六 给定这样的输入 Array Thursday gt 8 Friday gt 7 Monday gt 9 Tuesday gt 12 Wed
  • 将 MongoDb 同步到 ElasticSearch

    我正在寻找一种将 MongoDB 中的集合与 Elastic Search ES 同步的方法 目标是以 MongoDB 作为主要数据源 并使用 MongoDB 作为全文搜索引擎 我的项目的业务逻辑是用python写的 网上有多种方法可供选择
  • 如何对“s3cmd ls”的输出进行排序

    Amazon s3cmd ls 的输出如下 2010 02 20 21 01 1458414588 s3 file1 tgz 00 br 2010 02 20 21 10 1458414527 s3 file1 tgz 01 br 2010
  • 从 CouchDB 检索分层/嵌套数据

    我对 couchDB 很陌生 甚至在阅读之后 最新存档现已删除 http wiki apache org couchdb How to store hierarchical data 通过 将每个节点的完整路径存储为该节点文档中的属性 ht
  • 无法通过远程连接连接到kibana

    我已经在服务器上安装了 Kibana 5 4 和 Elastic search 5 4 我可以使用以下命令在本地计算机上通过curl 访问 Kibana 和 Elastic search curl localhost 5601 我得到以下回
  • Elasticsearch 将字符串与模糊字段相匹配

    我正在尝试将字符串与字段匹配 并且只想应用模糊性 例如 对于这些文档 title replace oilfilter title replace motoroil 以下查询应仅匹配第一个文档 Replace oilfilter Replac
  • UWP/C#:ObservableCollection 就地排序(不滚动)

    在 UWP 应用程序中 我尝试对ObservableCollection绑定到一个ListView 所以collection OrderBy 创建一个新集合 不是一个选项 到目前为止 我使用了这种扩展方法 public static voi
  • 如何在字符串中的某个字符之后按字母顺序对 php 数组进行排序

    我有两个 php 数组 对于每个数组都有一个不同的排序问题 1 首先包含域列表 values 0 absd com values 1 bfhgj org values 2 sdfgh net values 3 sdff com values
  • 如何在 PHP 中对数组和数据进行排序?

    这个问题旨在作为有关 PHP 中数组排序问题的参考 人们很容易认为您的特定案例是独特的并且值得提出新问题 但大多数实际上只是此页面上的解决方案之一的微小变化 如果您的问题因与此问题重复而被关闭 请仅在您能解释为什么它与以下所有问题显着不同的
  • 使用映射创建 Elasticsearch 索引

    我正在努力完成索引创建的简单任务 目标是使用分析器和字段映射创建索引 当我使用分析器创建索引时 我可以通过分析 api 调用与分析器对话 但是当我添加映射信息时 创建索引调用失败 并显示 未找到字段 field 的分析器 analyzer1
  • 按属性对对象列表进行排序 C#

    我有这门课 public class Leg public int Day get set public int Hour get set public int Min get set 我有一个获取腿列表的函数 称为 GetLegs Lis
  • 超出elasticsearch中字段的最大长度 - kibana中的错误

    发现 prod logs 索引的 CSnZmwB xkQcDCOrP1V 文档的 message 字段的长度已超过 1000000 允许分析突出显示的最大值 可以通过更改 index highlight max analyzed offse
  • 在 Elasticsearch Nest 查询中加载特定字段

    该文档似乎表明我可以返回字段的子集而不是整个文档 这是我的代码 var result client Search
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • 寻找嵌套列表中的最低值?

    我正在尝试编写一个函数 它接受一个列表并可以打印该列表中的最小整数 现在我试图弄清楚在嵌套列表中该怎么做 如果最低数字位于这些嵌套列表之一中 那么总的来说它将打印该数字 我的代码在这里 def listMin list2 3 4 2 99
  • 将嵌套列表转换为嵌套列表

    我知道可以将项目列表从一种类型转换为另一种类型 但是如何将嵌套列表转换为嵌套 List 已经尝试过的解决方案 List
  • 像 Google Play 商店一样在垂直 RecyclerView 中动态不同图像水平 RecyclerView

    我一直在关注这个教程 http android pratap blogspot co za 2015 12 horizo ntal recyclerview in vertical html http android pratap blog

随机推荐

  • 从 Symfony2 中的实体和存储库登录的正确方法

    在 symfony2 架构中记录来自实体或存储库类的消息或错误的方法是什么 在 symfony1 中 您可以使用单例来杀死小狗 方法是执行以下操作以从任何地方获取记录器 sfContext getInstance gt getLogger
  • 如何在 Vapor 3/Fluent 中记录 SQL 语句?

    看起来在 Vapor 2 中你可以这样做 let query
  • 更改组织模式新一天开始的时间

    我使用组织模式来计时我的工作 有时我会工作几个小时到午夜 例如 我记录的时间从 2013 年 6 月 3 日晚上 10 点开始 到 2013 年 6 月 4 日凌晨 2 点结束 组织模式在凌晨 0 点进行划分 开始新的一天 但如果将 0am
  • Excel创建乘法条件排名

    我试图在此图表中进行有条件排名 On the right you can see the total score and ranking from the Match 1 2 3 sum on line A and C I have a t
  • 使用 Twitter Bootstrap 的水平形式内的普通(垂直)形式

    我想要一个在第一层具有水平布局的表单 但是在一行内可以有一个 内联 表单 我想要一个垂直 默认 布局 有没有一种简单的方法可以实现这一目标 Note form inline没有做我正在寻找的事情 因为它没有将内部标签放在输入的顶部 到目前为
  • Java 中是否有与 StringWriter 等效但内部带有 StringBuilder 的东西?

    我注意到 StringWriter 在内部使用 StringBuffer 但是 如果您不需要同步开销 是否有与 StringWriter 等效的内部使用 StringBuilder 的方法 如果你恰好使用 Apache Commons IO
  • 允许 Rust 格式中未使用的命名参数!() 系列

    Given format red reset text red RED blue BLUE reset RESET 编译器退出并出现错误 error named argument never used gt example rs 1 47
  • 提取后视频帧是颠倒的

    我的问题是 当我使用 opencv 将视频提取到帧中时 有时我得到的帧会翻转 这在我的机器 窗口 和 VM ubuntu 上都发生过 但是我测试的一些视频 帧不翻转 所以 我想知道应该在我的代码中更改 添加哪些因素或哪些内容 以使提取内容无
  • WebSocket 握手:意外响应代码:404

    正在编写我的第一个 websocket 程序并且正在得到 WebSocket 握手 意外响应代码 404 加载网页时出错 我使用的是 JDK 1 7 和 jboss 8 wildfly8 0 有人可以帮忙吗 window onload in
  • 通过代码更改 Vaadin 7 中的主题

    我正在 Vaadin 7 中做一个项目 我需要更改页面的主题 在 Vaadin 6 中 有一个名为 setTheme 的函数 这样我就可以在代码中的任何位置使用该函数更改主题 但是 在 Vaadin 7 中 我找不到类似的东西 我知道会有办
  • SLES Apache Solr start.jar,无法访问 jarfile

    我在启动 Apache Solr 搜索时遇到一些问题 在我的 SLES 11 64 位服务器上安装 java 7 后 我将 solr 3 6 1 解压到 srv apache solr 3 6 0 之后我想启动该软件 但是当我尝试时 jav
  • 如何解决此错误消息:错误:virtualenvwrapper 无法在路径中找到 virtualenv?

    我正在尝试在 Mac 上安装 Python Goose 我运行的是 OSX 10 9 3 安装 Goose 的第一步是 mkvirtualenv no site packages goose 但是 当我运行此命令时 我收到以下错误消息 错误
  • Xcode在哪里打开快速搜索?

    我不知道如何让它索引我的项目文件 快速打开应该搜索任何open项目 曾经有一个路径首选项 但我相信它在 3 1 中被删除了
  • 交换数组中的奇数和偶数

    我在这个网站上看到了这段代码 它使用一种方法对数组进行排序 偶数在前面 奇数在数组后面 我想知道你是否可以做同样的事情 除了先出现奇数 然后出现偶数 我尝试过但没有成功 我是java编码新手 我想测试递归 public class Recu
  • 导致 ValueError: 'b' in __slots__ 与类变量冲突的数据类和槽

    我不明白错误消息 也找不到其他问题和答案来帮助我理解这一点 MWE 使用 Python 3 9 2 进行测试 我知道有一个slots TruePython 3 10 数据类中的参数 但这不是这里的选择 错误输出 Traceback most
  • 如何查看Vite项目中的公共目录进行热加载?

    我有一个使用 Vite 配置的 React 项目 热重载效果很好 但我使用react i18next对于多语言支持 这是我的结构 public gt en gt translation json gt ru gt translation j
  • 如何确定一系列循环数据中的高值和低值?

    我有一些代表周期性运动的数据 所以 它从高点到低点 然后又回来 如果你要绘制它 它就像一个正弦波 然而 每个周期的幅度略有不同 我想列出整个序列中的每个最大值和最小值 如果有 10 个完整的周期 我最终会得到 20 个数字 其中 10 个为
  • Worldwind - 形状总是显示在图像之上?

    我在 WorldWindowGLJPanel 的图层列表中添加了两个图层 其中之一是包含形状的 RenderableLayer 另一个是包含光栅图像的 BasicTiledImageLayer 一层包含一个对象 问题是 当我使用图层管理器
  • 抑制 C# 垃圾回收

    我的应用程序分配大量内存 数百万个小对象 总计几千兆字节 并保留很长时间 NET 是否浪费时间检查所有这些数据来对其进行 GC 第 2 代 GC 检查所有对象的 GC 多久发生一次 有什么办法可以降低它的发生频率或者暂时抑制它的发生吗 我确
  • 如何在 Elasticsearch 中同时按父字段和嵌套字段排序?

    我需要同时按父字段和嵌套字段在 Elasticsearch 中排序 我的数据是这样的 id 1 rank 8 price 12 45 offers id 777 rank 12 price 45 75 id 2 rank 35 price