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

ElasticSearch-聚合/分组依据:排序和分页

葛航
2023-03-14

我正在尝试使用Elasticsearch(2.4)聚合对使用该查询的多个索引按“productId”分组

{
  "from": 0,
  "size": 0,
  "min_score": 0.15,
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "match_phrase_prefix": {
                "keywords.family": {
                  "query": "low fat milk",
                  "fuzziness": 0.7,
                  "boost": 5
                }
              }
            }
          ]
        }
      }
    }
  },
  "aggs": {
    "group_by_0": {
      "terms": {
        "field": "productId",
        "size": 50

      },
      "aggs": {
        "top_tag_hits": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  }
}

1) 我想按分数排序,所以我尝试使用

"order": {"_score": "desc"}

哪个返回

"type": "aggregation_execution_exception",
"reason": "Invalid term-aggregator order path [_score]. Unknown aggregation [_score]"

2) 此外,我正在尝试使用分页,“size”键实际起作用,但“from”键不起作用

**更新-聚合结果示例**

{
  "took": 5108,
  "timed_out": false,
  "_shards": {
    "total": 105,
    "successful": 105,
    "failed": 0
  },
  "hits": {
    "total": 9963,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "group_by_0": {
      "doc_count_error_upper_bound": 69,
      "sum_other_doc_count": 9779,
      "buckets": [
        {
          "key": 98761,
          "doc_count": 36,
          "top_tag_hits": {
            "hits": {
              "total": 36,
              "max_score": 0.36901662,
              "hits": [
                {
                  "_index": "retailer-1",
                  "_type": "product",
                  "_id": "1409421",
                  "_score": 0.36901662,
                  "_source": {
                    "productId": 98761
                  }
                }
              ]
            }
          }
        },
        {
          "key": 107459,
          "doc_count": 36,
          "top_tag_hits": {
            "hits": {
              "total": 36,
              "max_score": 0.42744976,
              "hits": [
                {
                  "_index": "retailer-2",
                  "_type": "product",
                  "_id": "1402563",
                  "_score": 0.42744976,
                  "_source": {
                    "productId": 107459
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

希望有人能帮忙

共有1个答案

墨宜人
2023-03-14

尝试以下查询

{
 "from": 0,
 "size": 0,
 "query": {
 "filtered": {
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase_prefix": {
            "keywords.family": {
              "query": "low fat milk",
              "fuzziness": 0.7,
              "boost": 5
            }
               }
             }
            ]
          }
        }
      }
   },
  "aggs": {
  "group_by_0": {
    "terms": {
    "field": "productId",
    "size": 50

  },
     "aggs": {
        "top_tag_hits": {
           "top_hits": {
              "size": 1,
              "sort": [
                 {
                    "_score": {
                       "order": "desc"
                    }
                 }
              ]
           }
        }
     }
    }
   }
  }

这将按得分的降序排列热门歌曲。对于聚合桶上的分页,目前还不可能实现。可能在较新版本中获得此功能。

 类似资料:
  • 给java类一些东西 我有一张物品清单 我希望能够对它们进行排序,这样它们就可以按照每个父对象的虚数的累积和排序,然后再按照虚数排序。 所以我最终 我知道用parentKey和sum of noThings映射它是 我想,也许包装我的Something类并获得每个父项的总密钥可能会在某种程度上起作用。 但看起来工作量很大,不太优雅。 如有任何意见/想法,将不胜感激。

  • 问题内容: 我有一张标签表,想从列表中获得计数最高的标签。 样本数据如下所示 使用 让我得到正在寻找的完美数据。但是,我想对它进行组织,以使最高的标签数排在首位,并限制它仅向我发送前20个左右。 我试过了 而且我不断收到“组功能的无效使用-ErrNr 1111” 我究竟做错了什么? 我正在使用MySQL 4.1.25-Debian 问题答案: 在所有版本的MySQL中,只需在SELECT列表中为聚

  • 问题内容: 考虑Oracle表。我想用顶薪与获得职工和。还假定没有“ empno”列,并且主键涉及许多列。您可以使用以下方法执行此操作: 这可行,但我必须重复测试deptno = 20和job =’CLERK’,这是我想避免的。有没有更优雅的方式编写此代码,也许使用?顺便说一句,如果这很重要,我正在使用Oracle。 问题答案: 以下内容经过了精心设计,但对于“ top x”查询而言,这是一个很好

  • 问题内容: 我希望能够从电子邮件表中选择一堆行并按发件人分组。我的查询如下所示: 该查询几乎可以按我希望的方式工作-它选择按电子邮件分组的记录。问题在于主题和时间戳记与特定电子邮件地址的最新记录不符。 例如,它可能返回: 当数据库中的记录是: 如果“编程问题”主题是最新的,那么在对电子邮件进行分组时如何使MySQL选择该记录? 问题答案: 一个简单的解决方案是将查询包裹与ORDER语句子选择 第一

  • 在elasticsearch中,我可以在第二个聚合的数字字段上聚合和排序聚合。 例如。 但是,我想根据分类字段值对聚合进行排序。也就是说,字段2的值是(“a”、“b”、“c”)中的一个值——我想首先按所有文档对a1进行排序,字段2为:“a”,然后字段2为“b”,最后字段2为“c”。 在我的例子中,每个字段1都有一个唯一的字段2。所以我真的只想找到一种方法,按字段2对a1结果进行排序。

  • 问题内容: 我是ElasticSearch的新手。 当前,我们正在将代码从关系数据库迁移到ElasticSearch。因此,我们正在将查询转换为ElasticSearch查询格式。 我正在寻找与以下查询等效的ElasticSearch- 有人可以为我提供上面的ElasticSearch查询示例吗? 问题答案: 根据上面的查询,您将拥有一个带有类型文档的索引,该文档的映射如下所示: 然后,相当于您上