当前位置: 首页 > 面试题库 >

聚合列表中的Elasticsearch两级排序

田慈
2023-03-14
问题内容

目前,我正在按文档分数对汇总进行排序,因此大多数相关项在汇总列表中排在首位,如下所示:

{
            'aggs' : {
                'guilds' : {
                    'terms' : {
                        'field' : 'guilds.title.original',
                        'order' : [{'max_score' : 'desc'}],
                        'aggs' : {
                            'max_score' : {
                                'script' : 'doc.score'
                            }
                        }
                    }
                }
            }
        }

我想在JSON中向订单条款订单数组添加另一个排序选项。但是当我这样做时:

{
        'order' : [{'max_score' : 'desc'}, {"_count" : "desc"},
    }

第二种无效。例如,当所有分数均相等时,则应基于查询进行排序,但不起作用。


问题答案:

作为对安德烈(Andrei)回答…以多个条件排序聚合的更正,您 必须
创建一个如术语聚合:订单中所示的数组,并且 必须 使用ElasticSearch 1.5或更高版本。

因此,对于Andrei的答案,更正为: "order" : [ { "max_score": "desc" }, { "_count": "desc" } ]

正如安德烈有它,ES不会抱怨,但将 使用“命令”元素中列出的最后一个项目。



 类似资料:
  • 问题内容: 我有这种结构的文档: 我想对FIELD2.SUBFIELDs中的数字总和的结果进行排序: 如果这样做,我将获得未排序的存储桶,但是我希望存储桶按“ a2”值进行排序。我该怎么做?谢谢! 问题答案: 你差点就吃了。你只需要一个添加属性到你的条件聚合,是这样的:

  • 是否可以在elasticsearch中更改范围聚合结果的排序?我在elasticsearch中有一个键控范围查询,并希望根据键而不是doc_count进行排序。 我的文件是: 和聚合查询: 此查询的结果是: 我想根据关键字对结果进行排序,而不是根据范围值。根据elasticsearch文档,无法指定排序顺序,当指定排序顺序时,我得到以下异常: 你有什么办法吗?谢谢!

  • 我们目前正在开发一个多语言文档CMS。因此,我们有翻译成不同语言的文件。 对于使用Elasticsearch进行搜索,我们目前使用每种语言(德语、英语、法语……)一个索引,其中同一文档的所有翻译共享相同的ID。 当用户搜索特定术语时,我们希望在所有语言中搜索,但只返回不同ID的列表。据我所知,只有使用以下术语聚合才能做到这一点: 这很好,但是作为弹性搜索文档https://www.elastic.

  • 假设我在ES中有以下文档,每个文档都有3个字段:f1、f2和分数。我想找到所有文档,按f1、f2分组,按组最大分数排序,在SQL我可以简单地这样做: elasticsearch中的等价物是什么?嵌套术语聚合不会给出正确的顺序,因为返回的f2术语桶都嵌套在同一个f1术语桶中。

  • 在elasticsearch中,是否有方法使用自定义分数对聚合桶进行排序/排序? 我正在按客户姓名进行扣球。每个客户都有多个订单,其中有一个交货日期字段(DeliveDate)。我想根据与当前日期的距离(接近程度)对桶进行排序。 例如,对交货日期更接近今天日期的客户名进行排序。 非常感谢。

  • 我有3个级别的父/子结构。假设: 公司- 由于这里经常更新可用性(以及员工),所以我选择对嵌套使用父/子结构。搜索功能工作正常(所有文档都在正确的碎片中)。 现在我想对这些结果进行排序。按公司(第1级)的元数据对它们进行排序很容易。但我也需要按第3级(可用性)进行排序。 我想要按以下顺序排列的公司列表: 与给定ASC位置的距离 评级DESC 最快可用性ASC 例如: A公司距离我们5英里,评分为4