代码之家  ›  专栏  ›  技术社区  ›  Laxmikant Dange

Elasticsearch按所选聚合值筛选数据

  •  0
  • Laxmikant Dange  · 技术社区  · 6 年前

    我要在个人资料收集搜索,每个个人资料有名字,中间名和姓氏,性别键。

    我使用简单搜索(纯文本)查询来查找整个文档。当我使用query作为查询字符串参数时,post body中的query对象不起作用。我想通过纯文本查询显示返回的配置文件列表,用户可以选择性别过滤器来过滤结果。

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

    例如:

    如果 http://localhost:9200/profiles/_search?q=dlinx

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

    将聚合结果返回为male:10, female:15 and 医生,那么算25。在以男性身份应用性别筛选后,我期望的结果是male:10, female:15,文档计数为15

    1 回复  |  直到 6 年前
        1
  •  3
  •   Pierre Mallet    6 年前

    您正在搜索post filters=D

    在聚合计数“完成”后,仅应用于筛选器命中的筛选器。

    Here is the documentation

    post\u过滤器应用于搜索结果末尾的搜索命中 已计算聚合后的搜索请求

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