【问题标题】:Bodybuilder js: Bucket Filter AggregationBodybuilder js:桶过滤器聚合
【发布时间】:2020-02-17 15:28:35
【问题描述】:

我想根据字段中的关键字出现来制作存储桶。

我查看了 elasticsearch 文档,发现 Filters Aggregation 应该很合适: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html#search-aggregations-bucket-filters-aggregation

目前我们正在使用 bodybuilder.js 来构建查询。我在源代码 (https://github.com/danpaz/bodybuilder/blob/master/src/aggregation-builder.js#L87) 中发现了一个未记录的函数:

bodybuilder()
     .aggregation('terms', 'title', {
         _meta: { color: 'blue' }
         }, 'titles')
        .build()

结果:

{
  "aggs": {
    "titles": {
      "terms": {
        "field": "title"
      },
      "meta": {
        "color": "blue"
      }
    }
  }
}

但这实际上与 ES 文档中描述的结构不同:

GET logs/_search
{
  "size": 0,
  "aggs" : {
    "messages" : {
      "filters" : {
        "filters" : [
          { "match" : { "body" : "error"   }},
          { "match" : { "body" : "warning" }}
        ]
      }
    }
  }
}

知道如何使用 bodybuilder.js 实现过滤器聚合吗?

【问题讨论】:

  • 你找到解决方案了吗,我和健美运动员在这里也很挣扎。

标签: elasticsearch bodybuilder.js


【解决方案1】:

这不是针对 bodybuilder.js 的解决方案,而是针对使用库的 javascript 的解决方案 - 与 bodybuilder.js 非常相似。它称为 elastic-builder.js。

关于你的问题,这段代码:

esb.requestBodySearch()
    .agg(esb.filtersAggregation('messages')
    .filter('errors', esb.matchQuery('body', 'error'))
    .filter('warnings', esb.matchQuery('body', 'warning')));

会给你这样的回应:

{
  "aggs": {
    "messages": {
      "filters": {
        "filters": {
          "errors": { "match": { "body": "error" }},
          "warnings": { "match": { "body": "warning" }}
        }
      }
    }
  }
}

看起来 bodybuilder.js 主要是为查询而构建的,并且更容易用于此目的。如果您想在没有沉重 json 开销的情况下进行更多控制,则弹性构建器可能是一种解决方案。

【讨论】:

    【解决方案2】:

    我们可以在 bodybuilder.js 中这样做:

    bodybuilder().aggregation('filters', {
        "filters": {
            "errors": { "term": { "body": "error" } },
            "warnings": { "term": { "body": "warning" } }
        }
    }, 'messages').build();
    

    以上代码将生成查询:

    {
      "aggs" : {
        "messages" : {
          "filters" : {
            "filters" : {
              "errors" :   { "term" : { "body" : "error"   }},
              "warnings" : { "term" : { "body" : "warning" }}
            }
          },
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 2018-09-14
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 2017-04-15
      • 1970-01-01
      • 2015-09-17
      相关资源
      最近更新 更多