首页 > 解决方案 > 按字段对结果进行分组并对其进行排序

问题描述

我有一个带有映射的示例索引:

released_at: {
  type: "date",
},
name: {
  type: "text",
  analyzer: "analyzer_startswith",
},

和自定义分析器analyzer_startwith

analyzer_startswith: {
  tokenizer: "keyword",
  filter: "lowercase",
},

通过它我可以搜索name以短语开头的所有文档:

{
    "query": {
        "match_phrase_prefix": {
            "name": "for"
        }
    }
}

样本结果(字段name):

[
  "Force of Vigor",
  "Former",
  "Forest",
  "Force of Rage",
  "Forest",
]

现在,我需要对重复项进行“分组”并按released_at但不改变结果顺序对其进行排序,即所有Forest文档都应在列表的第一个位置(之后Former)进行分组和排序。
因此,如果我们有结构的结果:

[
  {
    "name": "Force of vigor",
    "released_at": "2020-12-03"
  },
  {
    "name": "Former",
    "released_at": "2004-06-03"
  },
  {
    "name": "Forest",
    "released_at": "2021-04-25"
  },
  {
    "name": "Force of Rage",
    "released_at": "2020-12-03"
  },
  {
    "name": "Forest",
    "released_at": "2021-01-01"
  }
]

它应该是:

[
  {
    "name": "Force of vigor",
    "released_at": "2020-12-03"
  },
  {
    "name": "Former",
    "released_at": "2004-06-03"
  },
  {
    "name": "Forest",
    "released_at": "2021-01-01"
  },
  {
    "name": "Forest",
    "released_at": "2021-04-25"
  },
  {
    "name": "Force of Rage",
    "released_at": "2020-12-03"
  }
]

因此,第一次出现的原始位置没有改变,但记录已经排序。
任何想法如何做到这一点?对不起,但我不知道从哪里开始:/

标签: elasticsearch

解决方案


推荐阅读