使用弹性搜索API汇总过滤结果
问题描述:
我想根据我的过滤规则对文档数量进行汇总和计数。使用弹性搜索API汇总过滤结果
我看着从他们的网站的API:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html
,并与该出来了:
{ "size": 0,
"aggregations": {
"messages": {
"filters":{
"filters": {
"knowledge service": { "match": {"syslog_msg": "my-domain.com"}}
}
}
}
}
}
“syslog_msg” 可以包含诸如 “my-domain.com一些其他的价值。”
我得到的回应:
{
"_scroll_id" : "some scroll id",
"took" : 89,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1000000,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"messages" : {
"buckets" : {
"knowledge service" : {"doc_count" : 12000}
}
}
}
}
它似乎工作正常,但是当我跑的查询看12000条记录,其中一些没有精确匹配的字符串(在这种情况下,我-domain.com),我搜索。
例如,某些文档在syslog_msg中包含字符串“my”而不是“my-domain.com”。
如何更改查询,以便过滤我正在查找的字符串的完全匹配?
的解决办法是更换匹配match_phrase这将搜索并返回精确短语找到
答
您应该添加聚合到过滤器
由于elasticsearch文件说(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html);
{
"aggs" : {
"red_products" : {
"filter" : { "term": { "color": "red" } },
"aggs" : {
"avg_price" : { "avg" : { "field" : "price" } }
}
}
}
}