1

我正在尝试在字段上运行聚合并忽略特定值!所以我有一个字段路径,其中包含一堆不同的 url 路径。

{
   "size": 0,
   "aggs": {
      "paths": {
            "terms":{
               "field": "path" // Count the no unique path ~> values
            }

      }
   },
   "filter": {
      "bool": {
         "must_not": [
            {
               "regexp": {
                  // path MUST NOT CONTAIN media | cache
                  "path": {
                    "value": "(\/media\b|\bcache\b)"
                  }
               }
            }
         ]
      }
   }
}

运行它时,它不会过滤掉路径包含缓存或媒体的文档?!

如果我删除过滤器,如果我把它留在里面,将返回相同的结果。

4

1 回答 1

3

您可以尝试像这样在术语聚合中排除这些值

{
  "size": 0,
  "aggs": {
    "path": {
      "terms": {
        "field": "path",
        "exclude": ".*(media|cache).*"
      }
    }
  }
}

注意:来自文档

注意:正则表达式查询的性能很大程度上取决于选择的正则表达式。匹配 .* 之类的所有内容以及使用环视正则表达式都非常慢。如果可能,您应该尝试在正则表达式开始之前使用长前缀

另一种方法是在查询阶段删除这些文档,以便您可以将过滤器移动到查询,然后汇总剩余的结果。

编辑:使用日期过滤器

您可以将日期过滤器添加到查询中,以便您只能获得过去一天的结果,这样的事情会起作用。

{
  "query": {
    "range": {
      "name_of_date_field": {
        "gte": "now-1d"
      }
    }
  },
  "size": 0,
  "aggs": {
    "path": {
      "terms": {
        "field": "path",
        "exclude": ".*(media|cache).*"
      }
    }
  }
}
于 2016-09-28T03:18:22.773 回答