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

elasticsearch根据条件聚合到存储桶中

屈昊天
2023-03-14
问题内容

我从elasticsearch开始,并且一直试图进行一些聚合。基本上,我有一个数据集,包含以下形式的数据:

{
    "name": "The Chef Restaurant",
    "city": "New York",
    "state": "New York",
    "rating": "GOOD",
    "type": "Continental"
}

现在,我想进行一些汇总,并在一个查询中获得所有的Continental餐馆,Good餐馆,New York餐馆。

请注意,我不希望统计所有类型的餐厅,而只希望统计特定类型的餐厅。而且,这些聚合是相互独立的。就是说,当我说“好”时,我并不一定要它是“大陆”,它可以是意大利语或其他任何东西。

这是我尝试过的:

{
    "size": 0,
    "query": {
        "match_all": {}
    },
    "aggregations": {
        "good_restaurants": {
            "filters": {
                "match": {
                    "rating": "CONTINENTAL"
                }
            }
        },
        "continental_restaurants": {
            "filters": {
                "match": {
                    "type": "CONTINENTAL"
                }
            }
        },
        "restaurants_in_new_york": {
            "filters": {
                "match": {
                    "type": "CONTINENTAL"
                }
            }
        }
    }
}

这给了我错误:

{
   "error": {
      "root_cause": [
         {
            "type": "search_parse_exception",
            "reason": "Unknown key for a START_OBJECT in [good_restaurants]: [match].",
            "line": 9,
            "col": 17
         }
      ],
      "type": "search_phase_execution_exception",
      "reason": "all shards failed",
      "phase": "query",
      "grouped": true,
      "failed_shards": [
         {
            "shard": 0,
            "index": "test_master",
            "node": "-aWy78_mRaaBMcOAeiN9tg",
            "reason": {
               "type": "search_parse_exception",
               "reason": "Unknown key for a START_OBJECT in [good_restaurants]: [match].",
               "line": 9,
               "col": 17
            }
         }
      ]
   },
   "status": 400
}

我知道这似乎是一个简单的问题,但是我已经坚持了很长时间。任何帮助将不胜感激。


问题答案:

您可以按照以下方式使其按预期方式工作:

{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggregations": {
    "selected_types": {
      "filters": {
        "filters": {
          "good_restaurants": {
            "match": {
              "rating": "CONTINENTAL"
            }
          },
          "continental_restaurants": {
            "match": {
              "type": "CONTINENTAL"
            }
          },
          "restaurants_in_new_york": {
            "match": {
              "type": "CONTINENTAL"
            }
          }
        }
      }
    }
  }
}


 类似资料:
  • 此处为elasticsearch新用户,但存在术语聚合问题。我为187份文档编制了索引,其中包含“名称”、“主机”、“风险”等字段。字段风险有4个唯一值(“关键”、“高”、“中”、“低”、“信息”),我正在运行这样的术语聚合: 我希望得到一个结果,说明我有x个临界值,x个高值等等。问题是,我没有得到返回的桶。 我的Elasticsearch版本是7.12.0有什么想法吗 > 编辑:这是映射: 以下

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

  • 我有一张桌子,比如 as 希望将值聚合或将值条柱到 如何在SQL或更具体的spark sql中执行此操作? 目前我有一个侧视图,但这看起来相当笨拙/低效。 分位数离散化并不是我真正想要的,而是这个范围的。 https://github.com/collectivemedia/spark-ext/blob/master/sparkext-mllib/src/main/scala/org/apache

  • 问题内容: ES版本:1.5(Amazon Elasticsearch) 我的目标:在某个字段上具有重复数据删除功能的搜索结果。我目前正在对聚合进行一些研究,以解决重复数据删除问题。因此,我的结果是一个带有1个大小的存储桶的列表存储桶。但是,我找不到订购存储桶列表的方法。 当前查询: 结果: 我想看到第二个存储桶,其中max_score = 68.78424为第一个。这可能吗? 如果不建议使用聚合

  • ElasticsearchJava客户端SearchACK无法解析聚合结果。我在网上看到一些文章,建议添加以键为前缀的聚合类型。我添加了我认为适用于我的用例的内容,例如“sterms#和sum#”,但我无法确定哪种类型适用于主过滤器(在我的情况下键:“匹配”)。我希望桶对象被填充,但尽管elasticsearch的响应包含聚合,但它目前仍作为空数组返回。 注:这是为了能够进行单元测试。 Json响

  • Elasticsearch支持模糊搜索查询:https://www.elastic.co/guide/en/elasticsearch/guide/2.x/fuzzy-match-query.html 和按术语的桶聚合:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket