对嵌套数组进行排序并返回弹性中的前 10 名

2024-02-29

我在弹性索引中有一个嵌套数据类型,并且希望对所有返回的结果进行升序排序。我已经尝试过以下方法:

GET indexname/_search
{
                "_source" : ["m_iTopicID", "m_iYear", "m_Companies"],
                "query": {
                    "terms":{
                        "m_iTopicID": [11,12,13]
                    }
                },
   "sort" : [
       {
          "m_Companies.value" : {
             "order" : "asc",
             "nested_path" : "m_Companies"
          }
       }
    ]
}

索引的映射如下:

{
  "indexname": {
    "mappings": {
      "topicyear": {
        "properties": {
          "m_Companies": {
            "type": "nested",
            "properties": {
              "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "value": {
                "type": "float"
              }
            }
          },
          "m_People": {
            "type": "nested",
            "properties": {
              "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "value": {
                "type": "float"
              }
            }
          },
          "m_Places": {
            "type": "nested",
            "properties": {
              "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "value": {
                "type": "float"
              }
            }
          },
          "m_Subtopics": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "m_fActivation": {
            "type": "float"
          },
          "m_iDocBodyWordCnt": {
            "type": "long"
          },
          "m_iNodeID": {
            "type": "long"
          },
          "m_iTopicID": {
            "type": "long"
          },
          "m_iYear": {
            "type": "long"
          },
          "m_szDocID": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "m_szDocTitle": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "m_szGeo1": {
            "type": "nested",
            "properties": {
              "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "value": {
                "type": "float"
              }
            }
          },
          "m_szSourceType": {
            "type": "nested",
            "properties": {
              "name": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "value": {
                "type": "float"
              }
            }
          },
          "m_szSrcUrl": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "m_szTopicNames": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

这将返回 ID 为 11、12 或 13 的所有主题以及 m_Companies 列表...但列表不会按值字段升序排序。

然后我只想返回每个列表的前 10 个。因此该列表不会像当前那样返回数百个,而是仅返回 n 个。如果我无法实现此选项,我将仅使用 javascript splice(0,10) 在前端获取前 10 个,但如果 elastic 可以为我做到这一点,那就太好了。

提前致谢。


由于您在主/父级别查询中提供了排序,因此这将仅对父/根文档进行排序。正如您可能在结果中观察到的那样,文档按照 m_Companes.value 的最小值进行排序。

要对每个文档的嵌套文档进行排序,您必须深入嵌套文档并应用排序,因为 m_Companies 是父文档中的子文档。您必须使用嵌套的inner_hits,然后对内部点击数 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html.

This github https://github.com/elastic/elasticsearch/issues/9305问题有一个很好的例子,说明了我试图解释的内容,即如何根据嵌套文档中的值仅对父/根文档进行排序。

由于您希望所有文档都是嵌套的,因此您可以让嵌套查询使用 match_all 获取所有嵌套文档并根据值字段进行排序。

您可以使用以下查询

{
    "_source": ["m_iYear", "m_Companies"],
    "query": {
        "bool": {
            "must": [{
                    "terms": {
                        "m_iTopicID": [11, 12, 13]
                    }
                },
                {
                    "nested": {
                        "path": "m_Companies",
                        "query": {
                            "match_all": {}
                        },
                        "inner_hits": {
                            "sort": [{
                                "m_Companies.value": "asc"
                            }]
                        }
                    }
                }
            ]
        }
    },
    "sort": [{
        "m_Companies.value": {
            "order": "asc",
            "nested_path": "m_Companies"
        }
    }]
}

希望这可以帮助, 谢谢

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

对嵌套数组进行排序并返回弹性中的前 10 名 的相关文章

  • 按升序对数字字符串列表进行排序

    我创建了一个SQLite https en wikipedia org wiki SQLite数据库有一个存储温度值的表 第一次将温度值按升序写入数据库 然后 我将数据库中的温度值读入列表中 然后将该列表添加到组合框中以选择温度 效果很好
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • ElasticSearch:从 Painless 脚本中的嵌套字段计算 arcDistance

    我需要计算 Painless 脚本内的弧距 但在这种情况下还没有找到访问 geo API 的方法 即 第一点作为参数传递给脚本 这意味着我只获得原始值 第二点是从嵌套文档中读取的 这意味着我无法使用doc myGeoField value
  • 如何对字符串列表进行排序?

    在 Python 中创建按字母顺序排序的列表的最佳方法是什么 基本回答 mylist b C A mylist sort 这会修改您的原始列表 即就地排序 要获取列表的排序副本而不更改原始列表 请使用sorted http docs pyt
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • 使 TreeMap 比较器容忍 null

    这个定制的 Valuecomarator 按其值对 TreeMap 进行排序 但在搜索 TreeMap 是否具有某个键时 它不能容忍 nullpointException 如何修改比较器来处理零点 import java io IOExce
  • 归并排序究竟进行了多少次比较?

    我读到 在实践中 快速排序比合并排序快得多 其原因是隐藏常量 那么 随机快速排序复杂度的解是2nlnn 1 39nlogn 这意味着快速排序中的常数是1 39 但是合并排序呢 归并排序中的常数是什么 让我们看看能否解决这个问题 在合并排序中
  • 如何在 XSLT 中应用字母数字排序

    根据以下 XML 在 XSL 中实现字母数字排序的最佳方法是什么 Edit 澄清一下 下面的 XML 只是一个简单的示例 真正的 XML 将包含更多的变体值 使用将标签文本拆分为文本和数字部分substring before and sub
  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 如何在 Java 中对字符串的 ArrayList 进行排序?

    I have String被放入一个ArrayList随机的 private ArrayList
  • 弹性搜索不提供页面大小较大的数据

    获取数据大小 约20 000 问题 在 python 中使用以下命令搜索 Elasticsearch 索引数据 但没有得到任何结果 from pyelasticsearch import ElasticSearch es repo Elas
  • 在 JavaScript 中按值对字典进行排序

    这是我的字典 const dict x 1 y 6 z 9 a 5 b 7 c 11 d 17 t 3 我需要一种方法来排序我的dict字典从最小到最大或从最大到最小 或者即使我有一个包含排序键的数组也很好 但我不知道如何使用来做这样的事情
  • 快速排序优化

    我正在学习排序算法 下一步 我试图让我的实现接近std sort 到目前为止我还很远 我有 3 个快速排序的实现 标准快速排序 使用临时数组 quicksort with following optimizations median3 用于
  • Airflow log_id 格式错误

    我正在使用 Airflow v2 2 3 和apache airflow providers elasticsearch 2 1 0 在 Kubernetes 中运行 我们的日志会自动发送到 Elasticsearch v7 6 2 我在
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • `docker-compose up` 与使用环境变量的 `docker compose up`

    我正在尝试使用 Docker Compose 将三节点 Elasticsearch 集群部署到 Azure 容器实例 我松松地跟随这个例子 https www elastic co guide en elasticsearch refere
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • 找出区间内绝对差值最小的两个元素

    我给定了一个数组和一个 L R 类型的查询列表 这意味着找到任何两个数组元素之间的最小绝对差 使得它们的索引在 L 和 R 之间 其中数组的起始索引是 1 而不是 0 例如 采用包含元素 2 1 8 5 11 的数组 a 则查询 1 3 将
  • 如何为基于服务的数据库设置自动增量

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

随机推荐

  • Spring Integration 5.0 + Project Reactor:控制线程

    跟进问题https stackoverflow com a 47136941 1776585 https stackoverflow com a 47136941 1776585 我无法使我的集成 处理程序在使用时在并行线程中运行Flux
  • 如何在没有插件的情况下将 Google Analytics 与 Phonegap 结合使用?

    我正在制作一个应用程序 我想从用户那里获得分析 我尝试使用 Phonegap 插件 但没有成功实现它 我想知道是否可以通过将应用程序视为普通网页并在我的页面头部放置一些 JavaScript 来获取 Google Analytics 有一个
  • Bootstrap - 添加图例

    我目前正在使用 twitter bootstrap 它工作得很好 但我想向表单中使用的 well 元素添加一个图例 这样我就可以有多个well 表示表单上的子部分 我的表单现在的示例如下 例如 我想添加一个图例 以便我可以在 详细信息 标题
  • 在 Woocommerce 订单和电子邮件中的订单总计后添加自定义文本

    我使用它在购物车和结账页面上为来自特定国家 地区的客户显示自定义文本 add filter woocommerce cart totals order total html custom total message html 10 1 fu
  • OpenCsv 读取带有转义分隔符的文件

    我正在使用 opencsv 2 3 它似乎没有像我预期的那样处理转义字符 我需要能够处理不使用引号字符的 CSV 文件中的转义分隔符 示例测试代码 CSVReader reader new CSVReader new FileReader
  • Akka TestProbe 测试 context.watch() / 终止处理

    我正在使用 TestKit 测试 akka 系统 我正在测试的系统的一个参与者在收到某种消息类型后 context watches 发送者 并在发送者死亡时自杀 trait Handler extends Actor override de
  • Eclipse 将项目中的所有文件视为派生文件

    我在 Eclipse 工作区中创建了一个动态 Web 项目 它也是一个 Maven 项目 并受 SVN 控制 但在 打开资源 Ctrl Alt R 中 不会出现该项目中的文件 除非我从窗口的选项 右上角下拉菜单 显示派生资源 中进行检查 我
  • Android openGL 示例显示空白屏幕

    我刚刚在 Galaxy s3 上尝试了来自developer android com 的原始 Open GL 示例代码 它给我的只是一个空白屏幕 我更改了透明颜色并且屏幕背景发生了变化 但我仍然看不到代码所示的任何三角形或正方形 为了验证
  • LINQ to SQL C# 中的 SELECT COUNT

    如何使用 COUNT 编写 LINQ to SQL Example var purch from purchase in myBlaContext purchases select purchase 我怎样才能在这里得到计数 像那样 var
  • noexcept、继承构造函数以及对实际完整的不完整类型的无效使用

    我不确定这是否是一个错误GCC编译器或预期的行为noexcept 考虑以下示例 struct B B int noexcept virtual void f 0 struct D public B using B B D noexcept
  • facet_grid 中的多行

    我有一个数据集 大致如下所示 names tibble NAME 2 c Location1 Location2 Location3 Location4 dates tibble date seq as Date 2015 01 01 as
  • 字体在 iPhone 上的位置?

    我正在 iPhone 项目中使用 FreeType2 库 并且如果可能的话 我尝试简单地从系统加载 TTF 文件 FT Library library FT Face face int error error FT Init FreeTyp
  • 省略 xstream 中的 xml 声明

    我想使用 xstream 将内容附加到 xml 但每次运行时都使用 xstream toXml obj writer 它会向内容添加 xml 声明 我们可以在 xstream 中省略 xml 声明吗 我刚刚遇到这个问题 使用 XStream
  • 如何在 Javascript 中将数组转换为对象数组[重复]

    这个问题在这里已经有答案了 我想转换一个数组 如 John Jane 放入对象对数组中 如下所示 name John name Jane 请帮助我这样做 尝试数组中的 map 函数 const output John Jane map na
  • 使用 Selenium 验证

    我需要验证网页上的特定插槽是否已加载 我正在使用 Selenium WebDrivermain 函数 我应该使用 JUnit 测试用例吗 在任意对象之间检索文本的方法有哪些 div 有具体的id吗 如果给定这一页 http ideone c
  • R:为文字云图形/png添加标题

    我有一些有效的 R 代码 可以从术语文档矩阵生成标签云 现在 我想从许多文档创建一大堆标签云 并在稍后进行可视化检查 要知道标签云图片属于哪个文档 语料库 我想为生成的图形添加标题 我怎么做 也许这是显而易见的 但我仍然是 R 图形的初学者
  • DNS 与 GKE 内部负载均衡器

    我在 GKE 上有两个 kubernetes 集群 一个公共集群处理与外界的交互 另一个私有集群仅供内部使用 公共集群需要访问私有集群上的一些服务 我已通过以下方式将这些服务暴露给公共集群的 Pod内部负载均衡器 https cloud g
  • 为后台线程配置 Autofac 容器

    我有一个 asp net MVC 站点 其中有许多使用 InstancePerHttpRequest 范围注册的组件 但是我还有一个 后台任务 它将每隔几个小时运行一次 但不会有 httpcontext 我想获得一个已像这样注册的 IRep
  • 我可以对隐私网址做什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试将我的 Android 应用程序投放市场 而我最不需要的就是隐私 URL 问题是我没有网站
  • 对嵌套数组进行排序并返回弹性中的前 10 名

    我在弹性索引中有一个嵌套数据类型 并且希望对所有返回的结果进行升序排序 我已经尝试过以下方法 GET indexname search source m iTopicID m iYear m Companies query terms m