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

Elasticsearch聚合排名(按热门得分)

盖晋
2023-03-14
问题内容

我想按top_hit的doc.score订购存储桶。我当前的实现如下。

  group_by_iid: {
    terms: {
      field: 'iid',
      order: { max_score: 'desc' },
      size: 0
    },
    aggs: {
      max_score: { max: { script: 'doc.score' } },
      top_hit: {
        top_hits: {
          sort: [{ source_priority: { order: 'desc' } }],
          size: 1
        }
      }
    }
  }

这是错误的,因为存储桶是按其最高得分而不是其source_priority文档最高得分排序的。有办法解决这个问题吗?


问题答案:

我遇到了同样的问题,而解决问题的方法是在docs得分上引入子汇总。然后在我的外部聚合中,我按max_score聚合的名称排序

GET /my-index/my-type/_search
{
  "query": {
      "bool" : {
        "should" : [ {
          "match" : {
            "searchTerm" : {
              "query" : "style",
              "type" : "boolean"
            }
          }
        }, 
        {
          "flt_field" : {
            "searchTerm" : {
              "like_text" : "style"
            }
          }
        }]
      }
    },
    "aggs": {
        "group_by_target_url": {
          "terms": {
            "field": "targetUrl",
            "order": {
              "max_score": "desc"
            }
          },
          "aggs": {
            "max_score": {
              "max": {
                "script": "doc.score"
              }
            }
          }
    }
  }    
}

我遵循了此链接上的指示:

http://www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/search-aggregations-bucket-terms-
aggregation.html



 类似资料:
  • 我想根据top hits聚合中第一个元素所拥有的属性,从terms聚合中订购Bucket。 我的尽力而为查询如下(有语法错误): 有人知道如何做到这一点吗? 例子: 按“a”分组,按“id”(desc)排序存储桶,并按“b”(desc)排序最热门的内容,将给出:

  • 我想执行一个术语聚合,并在执行脚本操作后的每个结果桶中获取命中字段。 例如,如果这些是文档: 聚合按“年龄”字段进行,脚本为:“return‘doc['firstName']”doc['lastName']” 结果应该是: 铲斗1(年龄:15岁): null 玛丽·史密斯 安娜·泰勒 这在elasticsearch中可能吗? 编辑: 此外,我正在寻找一种在一个bucket中多次命中的情况下运行脚本

  • 在这里,我得到了错误: “无效的术语聚合顺序路径[price>price>price.max]。术语桶只能在子聚合器路径上排序,该路径由路径中的零个或多个单桶聚合和路径末尾的最终单桶或度量聚合组成。子路径[price]指向非单桶聚合” 如果我按持续时间聚合排序,查询可以正常工作,如 那么,有什么方法可以通过嵌套字段上的嵌套聚合来排序聚合吗?

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

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

  • 我已经在按\u score desc排序的查询部分中获得了所需的查询结果。现在我需要提取每个文档的3个字段。我想实现如下目标: 我刚刚试过: 1)使用折叠删除重复的值 但问题是它只会保留filed1的不同值,而忽略field 2和field 3的值。例如,我们有2条记录,如下所示: 使用此方法,我们只能获得一条记录,因为它们具有相同的field1值。我想要这三个字段的不同组合值。我们可以使用int