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

在Elasticsearch中限制分组结果

鲍俊杰
2023-03-14
问题内容

在我的elasticsearch索引“ people”中,包含以下文件:

{"name": "John", "district": 1},
{"name": "Anne", "district": 1},
{"name": "Mary", "district": 2},
{"name": "Bobby", "district": 2},
{"name": "Nick", "district": 1},
{"name": "Bob", "district": 3},
{"name": "Kenny", "district": 1}

我想得到一个文档的结果,该文档的分区为2或1,但是最多只能包含2个。因此,如果以上是我的整个索引,我希望它返回:

{"name": "John", "district": 1},
{"name": "Anne", "district": 1},
{"name": "Mary", "district": 2},
{"name": "Bobby", "district": 2},

用Elastic中的单个查询是否可以实现此目标?非常感谢您的帮助!


问题答案:

这样的事情应该做到:

GET /some_index/some_type/_search?search_type=count
{
  "aggs": {
    "district_1_or_2": {
      "filter": {
        "bool": {
          "should": [
            {
              "term": {
                "district": 1
              }
            },
            {
              "term": {
                "district": 2
              }
            }
          ]
        }
      },
      "aggs": {
        "district": {
          "terms": {
            "field": "district",
            "size": 10
          },
          "aggs": {
            "top": {
              "top_hits": {
                "size": 2
              }
            }
          }
        }
      }
    }
  }
}


 类似资料:
  • 问题内容: 我将书名存储在elasticsearch中,它们都属于许多商店。像这样: 如何获取所有书籍并按标题分组…以及每组一个结果(一组具有相同标题的行,这样我就可以获得所有ID和存储)? 基于上面的数据,我想获得两个具有所有ID的结果并将其存储在其中。 预期成绩: 问题答案: 在Elasticsearch中无法找到您想要的东西,至少在当前版本(1.1)中无法实现。 对于此功能,还有很长的悬而未

  • 问题内容: 有没有一种简单的方法可以将GROUP BY结果限制在前2位。以下查询返回所有结果。使用“ LIMIT 2”将整个列表减少到仅前2个条目。 结果如下: 谢谢乔恩 根据要求,我附上了表格结构和一些测试数据的副本。我的目标是创建一个视图,该视图具有每个唯一的rating_name的前2个结果 问题答案: 我认为MySQL中没有简单的方法。一种方法是通过为按rating_name分组的每一行生

  • 我调用了一些JSON结果,它在一个名为“cast”的数组中列出了一组参与者。我用这个JS调用列表中的第一项。。。 把它们放在一个小隔间里,像这样。。。 我需要列出前5个结果(不仅仅是第一个)。他们的方法简单吗?

  • 问题内容: 我是ES新手,并且有一些特定要求,我的文档如下所示 现在我需要使用以下查询的结果 我们如何在Elasticsearch中做到这一点。我只想要结果集中的这三列(即_source)。 请帮忙 问题答案: 您可以使用子聚合来实现。从ES 6.1开始,聚合也可以派上用场(尽管仍处于试验阶段)。 查询可能如下所示: 响应看起来像这样: 片刻考虑: 应该具有类型(以便能够对其进行聚合) 默认情况下

  • 问题内容: elasticsearch新手。编写搜索查询返回我集合中所有匹配的记录时遇到问题。以下是我对搜索记录的查询 通过运行此查询,我最多只能获取10条记录,请确保我的集合中有10条以上匹配的记录。我搜索了很多,最后在查询中得到了大小参数。但就我而言,我不知道记录总数。我认为给size变量一个无限的数字不是一个好习惯,因此如何处理这种情况请帮助我解决此问题,谢谢 问题答案: 显示所有结果不是很

  • 问题内容: 如何限制从数据库检索到的结果数? 问题答案: 您可以这样尝试,以明确获取10个结果。 如果后端支持,它将自动在后端创建本机查询以检索特定数量的结果,否则将在获取所有结果后进行内存限制。