我正在做一个分面的搜索UI,我想要添加的一个分面是IP字段的前三个八位字节。
例如,给定I为"192.168.1.1“、"192.168.1.2”、"192.168.2.1“的文档,我希望显示面"192.168.1 (2)”和"192.168.2 (1)“。
有没有我可以用来做这个的聚合?据我所知,范围聚合需要我预定义范围,而术语聚合只需要一个字段。
显然,对于我来说,另一种选择是将前三个八位字节作为一个单独的字段进行索引,但我当然希望避免这种情况。
谢谢!
发布于 2016-08-10 22:15:24
您可以添加分隔符为‘’的路径层次结构标记器。和一个自定义分析器,该分析器将标记器设置为您刚刚创建的标记器。
有关语法,请参阅以下问题:
Elasticsearch - using the path hierarchy tokenizer to access different level of categories
然后,您可以聚合术语,您将获得按每个数字组分组的结果
{
"key": "192",
"doc_count": 10
},
{
"key": "192.168",
"doc_count": 10
},
...在链接的答案中,有一种方法可以排除某些聚合级别。下面应该排除除具有3个数字级别的结果之外的所有结果。
"aggs": {
"ipaddr": {
"terms": {
"field": "your_ip_addr",
"exclude": ".*",
"include": ".*\\..*\\..*"
}
}https://stackoverflow.com/questions/38875605
复制相似问题