Elasticsearch:运行 聚合字段并使用不匹配值的正则表达式过滤掉特定值
Elasticsearch: Run aggregation on field & filter out specific values using a regexp not matching values
我正在尝试 运行 字段上的聚合并忽略特定值!所以我有一个字段 path,它包含一堆不同的 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)"
}
}
}
]
}
}
}
当 运行ning 时,它不会过滤掉路径包含 cache 或 media?!
的文档
如果我删除 过滤器,如果我将其留在原处,将返回相同的结果。
您可以像这样尝试 excluding 术语聚合中的那些值
{
"size": 0,
"aggs": {
"path": {
"terms": {
"field": "path",
"exclude": ".*(media|cache).*"
}
}
}
}
注意:来自documentation
Note: The performance of a regexp query heavily depends on the regular
expression chosen. Matching everything like .* is very slow as well as
using lookaround regular expressions. If possible, you should try to
use a long prefix before your regular expression starts
另一种方法是在查询阶段删除这些文档,这样您就可以将过滤器移动到查询,然后聚合剩余的结果。
编辑:带日期过滤器
您可以将日期过滤器添加到查询中,这样您就只会得到过去一天的结果,这样就可以了。
{
"query": {
"range": {
"name_of_date_field": {
"gte": "now-1d"
}
}
},
"size": 0,
"aggs": {
"path": {
"terms": {
"field": "path",
"exclude": ".*(media|cache).*"
}
}
}
}
我正在尝试 运行 字段上的聚合并忽略特定值!所以我有一个字段 path,它包含一堆不同的 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)"
}
}
}
]
}
}
}
当 运行ning 时,它不会过滤掉路径包含 cache 或 media?!
的文档如果我删除 过滤器,如果我将其留在原处,将返回相同的结果。
您可以像这样尝试 excluding 术语聚合中的那些值
{
"size": 0,
"aggs": {
"path": {
"terms": {
"field": "path",
"exclude": ".*(media|cache).*"
}
}
}
}
注意:来自documentation
Note: The performance of a regexp query heavily depends on the regular expression chosen. Matching everything like .* is very slow as well as using lookaround regular expressions. If possible, you should try to use a long prefix before your regular expression starts
另一种方法是在查询阶段删除这些文档,这样您就可以将过滤器移动到查询,然后聚合剩余的结果。
编辑:带日期过滤器
您可以将日期过滤器添加到查询中,这样您就只会得到过去一天的结果,这样就可以了。
{
"query": {
"range": {
"name_of_date_field": {
"gte": "now-1d"
}
}
},
"size": 0,
"aggs": {
"path": {
"terms": {
"field": "path",
"exclude": ".*(media|cache).*"
}
}
}
}