我想根据我的过滤规则汇总和计算出现的文档数量。
我从他们的网站上查看了 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 条记录时,其中一些与我搜索的字符串(在本例中为 my-domain.com)不完全匹配。
例如,某些文档在 syslog_msg 中有字符串“my”而不是“my-domain.com”。
如何更改查询以过滤我正在查找的字符串的完全匹配?
解决方案是将 match 替换为 match_phrase ,它将搜索并返回找到的确切短语