我正在尝试在字段上运行聚合&忽略具体的价值!所以我有一个字段路径,它包含一堆不同的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)"
}
}
}
]
}
}
}
运行此功能时,它不会过滤掉包含缓存或媒体的路径的文档?!
如果我删除了过滤器,如果我将其删除,则会返回相同的结果。
答案 0 :(得分:2)
您可以尝试excluding条款聚合中的这些值,如此
{
"size": 0,
"aggs": {
"path": {
"terms": {
"field": "path",
"exclude": ".*(media|cache).*"
}
}
}
}
警告:来自documentation
注意:正则表达式查询的性能很大程度上取决于常规 表达式选择。匹配像。*这样的一切都很慢 使用环绕正则表达式。如果可能的话,你应该尝试 在正则表达式开始之前使用长前缀
另一种方法是在查询阶段删除这些文档,这样您就可以将过滤器移到查询中,然后汇总剩余的结果。
编辑:使用日期过滤器
您可以添加日期过滤器进行查询,以便您只获得过去一天的结果,这样的效果就可以了。
{
"query": {
"range": {
"name_of_date_field": {
"gte": "now-1d"
}
}
},
"size": 0,
"aggs": {
"path": {
"terms": {
"field": "path",
"exclude": ".*(media|cache).*"
}
}
}
}