ElasticSearch - 如何订购聚合(不是聚合内的结果)

时间:2015-03-16 11:51:25

标签: elasticsearch

我执行一个返回一些命中的查询,以及一堆用于过滤结果的不同聚合。

我使用Knockout将结果数据绑定到我的页面,并且我希望能够指定过滤器在页面上显示的顺序。

我可以使用返回的聚合中的任何内容对其进行排序 最简单的方法是控制聚合部分在结果中出现的顺序。我该怎么做?

以下示例....我提交了一个包含多个聚合的查询。我标记了前四个。 我得到的聚合结果并不是我想要的。如何指定返回聚合的顺序(不是其中的条款......)?

查询:

{
  "from": 0,
  "size": 16,
  "aggs": {
    "Keyword": { **<------ One**
      "terms": {
        "field": "topics",
        "size": 15
      }
    },
    "Audience": { **<------- Two**
      "terms": {
        "field": "audience"
      }
    },
    "Category": { **<-------- Three**
      "terms": {
        "field": "topLevelCategory",
        "size": 15
      }
    },
    "Author": { **<--------- Four**
      "terms": {
        "field": "authors",
        "size": 10
      }
    },
    ...

结果:

    ...
   "aggregations": {
      "Resource": { **<--------- Six**
         "buckets": [
         ]
      },
      "Category": { **<--------- Three**
         "buckets": [
         ]
      },
      "Published": { **<---------- Five**
         "buckets": [
         ]
      },
      "Keyword": { **<------------ One**
         "buckets": [
         ]
      },
      ...

1 个答案:

答案 0 :(得分:0)

简而言之,您无法订购它们。一般来说,JSON中的键/值对被认为是无序的,所以我怀疑Elasticsearch会添加一个功能来执行此操作。

如果这是一个公共网站,我还强烈建议您在页面和Elasticsearch集群之间放置一些东西用于安全目的。无论如何&#34;东西&#34;是,可以转换结果并在javascript层相应绑定的列表中对聚合进行排序。