Elasticsearch,不计入条款

时间:2016-11-04 15:09:10

标签: elasticsearch

我试图让一个或几个ES请求计算我当前搜索中未包含的条款。

让我详细说明....我的前端看起来像这样:

front-end

我当前已选中已关闭,因此其他项目应显示如果我要包含该术语,他们将添加多少项目。

假设关闭== 500且拒绝== 100;
当我关闭时,被拒绝的字段应附加数字100。如果我取消选择已关闭,则应显示数字500.如果我选择拒绝且选择已关闭,则还应显示500.

够简单吧?我们只需添加一个计算状态字段的存储桶,它将为每个项目返回一个存储桶,然后我们从中获取值并显示它。

那部分我得到:)但是......当我实际添加一个术语(例如一个过滤NoOffer的术语)时,水桶不会包含其他字段......

这就是我的查询(全局存储区:ChintanShah25

{
  "size": 50,
  "from": 1,
  "sort": [
    {
      "createdAt": "desc"
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "wildcard": {
                  "fromPlace": "*rotter*"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "should": [
              {
                "wildcard": {
                  "status": "closed"
                }
              }
            ]
          }
        }
      ]
    }
  },
  "aggs": {
    "status": {
      "global": {},
      "aggs": {
        "all_status": {
          "terms": {
            "field": "status.raw",
            "size": 10
          }
        }
      }
    }
  }
}

全局现在显示所有不同的状态代码,但它没有考虑到语句的其余部分。 " fromPlace"过滤器没有得到应用。

1 个答案:

答案 0 :(得分:0)

我猜你正在寻找global aggregation,它将包括所有字段而不管查询。如果需要,您还可以使用filter aggregation作为选择性统计信息。

{
  "query": {
    "term": {
      "status": {
        "value": "closed"
      }
    }
  },
  "size": 0,
  "aggs": {
    "everything": {
      "global": {},
      "aggs": {
        "all_status": {
          "terms": {
            "field": "status.raw",
            "size": 10
          }
        }
      }
    }
  }
}