我将描述术语聚合的用例以及应该正确配置映射但给出集群状态的原因,这都不是选项。
我正在对TB级的原始日志数据进行全文搜索,并试图对匹配的特定术语进行计数。
给出一个像192.168.0.*
这样的查询字符串,我在文档中按预期找到了引用诸如192.168.0.12
这样的术语的文档。 具体字段不一致。
我想做的是找到的术语的汇总。如果ES返回在其中找到192.168.0.12
的100个文档,则应该有一个反映此内容的计数器(192.168.0.12: 100
)。同样,如果找到了192.168.0.254
的50个文档,我希望看到192.168.0.254: 50
。
鉴于规模和时间安排,这必须在Elasticsearch中完成,而不是在应用程序端进行侧加载和迭代。这可行吗?
答案 0 :(得分:0)
为此,您需要定义映射这样的
"IP_ADDRESS": {
"type": "keyword",
"fields": {
"raw":{
"type": "text"
}
}
}
因此,搜索将在 IP_ADDRESS.raw 上,而术语汇总将在 IP_ADDRESS
上{
"query": {
"query_string": {
"default_field": "IP_ADDRESS.raw",
"query": "192.168.0.*"
}
},
"aggs": {
"count_term": {
"terms": {
"field": "IP_ADDRESS",
"size": 1000
}
}
}
}