使用Elastic Search API

时间:2017-03-06 06:37:12

标签: elasticsearch elastic-stack aggregator

我想根据我的过滤规则汇总和统计显示的文档数量。

我查看了他们网站上的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)没有完全匹配。

例如,某些文档中包含字符串" my"在syslog_msg而不是" my-domain.com"。

如何更改查询以便过滤我正在寻找的字符串的完全匹配?

解决方案是用match_phrase替换匹配,匹配将搜索并返回找到的确切短语

1 个答案:

答案 0 :(得分:0)

您应该将聚合添加到过滤器

正如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" } }
        }
    }
}

}