Elasticsearch通过选定的聚合值过滤数据

时间:2018-09-27 09:24:33

标签: elasticsearch

我必须在个人档案集合中进行搜索,每个个人档案都有firstName,middleName和lastName,性别关键字。

我添加了关于性别的术语汇总,它将返回男性和女性的计数。 我正在使用简单搜索(纯文本)查询来查找整个文档。当我使用查询作为查询字符串参数时,来自正文的查询对象不起作用。我想显示通过纯文本查询返回的配置文件列表,用户可以选择性别过滤器以过滤结果。

我的问题是我应该在哪里使用哪个过滤器选项,以便在应用过滤器后获得基于查询和文档的聚合结果。

我尝试使用全局聚合,但是它忽略了查询。我尝试使用聚合中的过滤器,但这就是过滤聚合。

例如:

如果http://localhost:9200/profiles/_search?q=dlinx带有正文

{
    "aggs": {
       "Gender": {
        "terms": {
          "field": "gender"
        }
      }
    }
}

将聚合结果返回为男性:10,女性:15,然后文档计数为25。在将性别过滤器应用为男性后,我期望结果为男性:10,女性:15,文档数为15

1 个答案:

答案 0 :(得分:3)

您要搜索帖子过滤器= D

在汇总计数“完成”之后,仅用于过滤匹配的过滤器。

Here is the documentation

  

post_filter应用于搜索匹配项的末尾   搜索请求,已经计算出聚合之后

您的_search正文应该是这样的:

GET profiles/_search
{
  "query": {
    "match": {
      "<yourfield>": "dlinx"
    }
  },
  "aggs": {
    "Gender": {
      "terms": {
        "field": "gender"
      }
    }
  },
  "post_filter": {
    "term": {
      "gender": "<theselectedGender>"
    }
  }
}