elasticsearh如何找到价格低于数字的文档的百分比

时间:2016-03-01 00:07:21

标签: elasticsearch

让我们说我想让用户输入城市的名称和物品的价格(任何东西)

我需要知道该城市中(事物)的百分比,其中某个字段的价值低于输入的值:

我可以搜索这样的城市:

  "query": {
    "filtered": {
      "query": {
        "match": {
          "city": "Paris"
        }
      }
    }
  },

但我不知道如何做其他要求,你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

Suposedly percentile-ranks-aggregation旨在实现这一目标

示例:

post <index>/<type>/_search
{
   "filter": {
      "term": {
         "city": "blore"
      }
   },
   "aggs": {
      "rank": {
         "percentile_ranks": {
            "values": [
               31
            ],
            "field": "price"
         }
      }
   },
   "size": 0
}

但是在测试时我发现它有问题,我相信它与issue有关。

因此,一旦使用类似如下的查询获取文档计数,就可以计算客户端的百分比:

   post _search
{
   "filter": {
      "term": {
         "city": "blore"
      }
   },
   "aggs": {
      "less_price_filter": {
         "filter": {
            "range": {
               "price": {
                  "lt": 60
               }
            }
         }
      }
   },
   "size": 0
}

<强>响应

  {
       "took": 1,
       "timed_out": false,
       "_shards": {
          "total": 5,
          "successful": 5,
          "failed": 0
       },
       "hits": {
          "total": 3,
          "max_score": 0,
          "hits": []
       },
       "aggregations": {
          "less_price_filter": {
             "doc_count": 2
          }
       }
    }

可以通过划分doc_count*100/total在客户端计算百分比。