PostgreSQL过滤查询到Elasticsearch查询

时间:2018-11-22 07:41:08

标签: elasticsearch

我在PG中有一个这样的查询,它很简单,可以过滤许多范围的数据类型。我在PG中有这样的查询,它非常简单,可以过滤许多范围的数据类型。

select id,
sum(1) filter (where (col1+col2+col3) > 0 and (col1+col2+col3) < 10)  as 'type_1'
from tbl
where date >= '2018-11-01'
group by id

使用elasticseach替换此查询时,我被卡住了。我该如何解决这个查询?

{  
   "size":0,
   "query":{            
   },
   "aggs":{  
      "current_data":{               
         "aggs":{  
            "id":{  
               "terms":{  
                  "field":"id",
                  "size":15
               },
               "aggs":{  
                    "type_1":{  
                       "filter" : { 
                            "bool":{ 
                                "must" : [
                                     {
                                        "range":{  
                                            "col1" + "col2" + "col3":{  // are there any equivalent to do like this?
                                               "gt":0
                                            }
                                         }
                                     }
                                ]
                            }
                       }
                    }
                 }
            }
         }
      }
   }

1 个答案:

答案 0 :(得分:0)

您可以使用如下脚本过滤器来做到这一点:

{
  "size": 0,
  "aggs": {
    "current_data": {
      "terms": {
        "field": "id",
        "size": 15
      },
      "aggs": {
        "type_1": {
          "filter": {
            "script": {
              "script": {
                "source": "def sum = doc.col1.value + doc.col2.value + doc.col3.value; return sum > 0 && sum < 10"
              }
            }
          }
        }
      }
    }
  }
}