当前位置: 首页 > 知识库问答 >
问题:

具有按文本/关键字排序的ElasticSearch聚合器

王才英
2023-03-14

我设置了elasticsearch来搜索产品目录的变体。基本上在哪里:

Product有许多变体

变量索引json/mapping包含产品名称。

POST /variants/_search?size=0
{
    "aggs" : {
        "min_price" : { "min" : { "field" : "price" } }
    }
}

这是我接下来需要的(某种程度上):

POST /variants/_search?size=0
{
    "aggs" : {
        "product_name" : { "sort by product_name asc / desc" }
    }
}

我的最后一个任务是按照字母顺序对它们进行排序,但我似乎无法使用聚合器按关键字字段(ASC/DESC)进行排序

共有1个答案

黄宏旷
2023-03-14

在ES6.0中,您可以这样做。请注意,大小限制返回的数量,请求越多,执行查询的开销就越大。因此,如果你真的需要成千上万,你可能会想尝试一个不同的方法。可能是您为产品创建了一个单独的汇总索引,您可以搜索/排序,而不是试图通过聚合来进行搜索/排序。

GET /variants/_search
{
    "size": 0,
    "aggs" : {
        "product_name" : {
            "terms" : {
                "field" : "product_name",
                "size": 1000,
                "order" : { "_key" : "asc" }
            }
        }
    }
}

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregations-order

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

  • 数据 我在ES索引中保留了对象。其中每个字段都有一个myKey和myName字符串字段(持久化为关键字字段)。不能保证同一个myKey的myName总是相同的。E、 g.以下两个条目共享相同的myKey,但具有不同的myName值: 挑战 我需要选择并返回所有不同的myKey值,查找并显示最可能的myName(myKey上下文中出现的最多),并按myName对生成的Bucket进行排序。 到目前为

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

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

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

  • 问题内容: 我以前用映射“关键字”存储了一些字段。但是,它们是区分大小写的。 为了解决这个问题,可以使用分析仪,例如 与映射 但是,按期进行汇总不起作用。 原因:java.lang.IllegalArgumentException:默认情况下,在文本字段上禁用Fielddata。在[a]上设置fielddata = true,以通过反转取反的索引将字段数据加载到内存中。请注意,这可能会占用大量内存