对嵌套数组进行排序并返回弹性中的前 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 名 的相关文章

  • 为什么 **sort** 不在每台机器上进行相同的排序?

    使用相同的sort具有相同输入的命令在不同的机器上产生不同的结果 我该如何解决这个问题 The man page http developer apple com documentation Darwin Reference ManPage
  • 如何对 glob.glob 进行数字排序?

    我在一个文件夹中有一堆按数字排序的文件 当我尝试对 glob glob 进行排序时 我从来没有以正确的顺序获得文件 文件示例和预期输出排序 folder C Users user Desktop folder 1 sample mp3 C
  • 无法通过远程连接连接到kibana

    我已经在服务器上安装了 Kibana 5 4 和 Elastic search 5 4 我可以使用以下命令在本地计算机上通过curl 访问 Kibana 和 Elastic search curl localhost 5601 我得到以下回
  • ElasticSearch 匹配多个前缀术语

    我试图为 ElasticSearch 提供一个包含多个术语的查询 然后给出匹配的文档 其中指定的术语位于目标字段中的任何位置 这些术语可以是完整的单词或单词前缀 示例文档 msg 你好 我是一条短信 示例查询字符串 你好消息 你好 和 消息
  • 使用映射创建 Elasticsearch 索引

    我正在努力完成索引创建的简单任务 目标是使用分析器和字段映射创建索引 当我使用分析器创建索引时 我可以通过分析 api 调用与分析器对话 但是当我添加映射信息时 创建索引调用失败 并显示 未找到字段 field 的分析器 analyzer1
  • javascript中的父子关系排序

    我有以下结构 category id 1 parent category null category id 2 parent category 1 category id 3 parent category 1 category id 4
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • Python:对这个字典进行排序(字典中的字典)

    d a k 1 b whatever b k 2 b sort by k 想要在 python 中按 k 降序对这个字典进行排序 有点棘手 请帮忙 dicts 是无序的 所以没有办法直接对它们进行排序 但如果你是 愿意转换dict进入 键
  • 包含 Elasticsearch 中的查询或部分匹配

    我正在寻找一个 amend 这个词 它可能在数据中以 amending amendment 甚至 amend 的形式出现 搜索此类单词的最佳方法是什么 我知道通配符可以实现这一点 但由于我的代码的其他部分 我被限制不使用它 有哪些不同的方式
  • Rails Searchkick / Elasticsearch has_many 和belongs_to 关联

    我尝试使用 Searchkick 运行搜索并基于多个模型返回 我的书本模型包含这个 class Book lt ActiveRecord Base searchkick has many book subjects has many sub
  • 嵌套类型的动态映射

    我正在尝试为如下对象创建动态映射 product productId 99999 manufacturerId A0001 manufacturerCode A101LI name Test Product description Desc
  • 在 C# 中对 Directory.GetFiles 的结果进行排序

    我有这段代码来列出目录中的所有文件 class GetTypesProfiler static List
  • 按文件名对 $_FILES 进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 他俩 如您所知 在新的 HTML5 中 您可以非常轻松地上传多个文件 但我这里的问题是如何按列 名称 对 FILES 数组进行排序 这是
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • 如何按字母顺序对 UITableView 分区进行排序?

    我有一个包含 3 个类别的分段 UITableView 我正在使用这段代码 NSArray arrayOne NSArray arrayWithObjects one two three four nil NSDictionary dict
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 如何在 javascript 中实现映射或排序集

    Javascript 有使用数字索引的数组 john Bob Joe 以及可以像关联数组或 映射 一样使用的对象 允许对象值使用字符串键 john 28 bob 34 joe 4 在 PHP 中 两者都很容易A 按值排序 同时保留密钥 和B
  • 在 Java 中对多语言环境字符串进行排序

    我正在尝试按字符串字段 国家 地区 对对象列表进行排序 每个国家 地区都使用其母语 阿根廷 澳大利亚 奥地利 例如 我想要做的是让 出现在 A 国家之后 因为字母 对应于拉丁语 B 我正在尝试使用默认的 Collat er 但非拉丁名称仍然
  • 对范围值进行排序

    我想对表示数值范围的字符串数组进行排序 如下所示 b 0 5 100 250 5 25 50 100 250 500 25 50 使用sort我得到的方法 b sort gt 0 5 100 250 25 50 250 500 5 25 5

随机推荐

  • 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