Esempio n. 1
0
    def _bucketize(self, queries, fields, size, specs):
        if not specs: specs = self._specs()

        dsl = compile(queries, specs)[0] if queries else {"match_all": {}}
        dsl = {"query": dsl, "aggs": {}, "size": 0}

        for field in fields:
            nested, var = check_nested_label(specs[0], field)

            # replace text field with field.keyword
            if "types" in specs[0]:
                if var in specs[0]["types"]:
                    if specs[0]["types"][var] == "text":
                        var = var + ".keyword"
            # nested aggs
            aggs = {"terms": {"field": var, "size": size}}
            if nested:
                for nest1 in nested:
                    aggs = {"nested": {"path": nest1}, "aggs": {nest1: aggs}}
            dsl["aggs"][field] = aggs

        # bucketize
        r = requests.post(self._host + "/" + self._index + "/_search",
                          json=dsl)
        self._check_error(r)

        # summariz results
        buckets = {}
        aggs = r.json()["aggregations"]
        for field in aggs:
            buckets[field] = {}
            self._scan_bucket(buckets[field], aggs[field])
        return buckets
Esempio n. 2
0
 def stats(self, queries, fields):
     specs = self._specs()
     dsl = compile(queries, specs)
     query = {"query": dsl[0], "aggs": {}, "size": 0}
     for field in fields:
         nested, var = check_nested_label(specs[0], field)
         # nested aggs
         aggs = {"stats": {"field": var, "missing": 0}}
         if nested:
             for nest1 in nested:
                 aggs = {"nested": {"path": nest1}, "aggs": {field: aggs}}
         query["aggs"][field] = aggs
     r = requests.post(self._host + "/" + self._index + "/_search",
                       json=query)
     self._check_error(r)
     aggs = r.json()["aggregations"]
     data = {}
     for field in fields:
         values = aggs
         while field in values:
             values = values[field]
         data[field] = values
     return data
Esempio n. 3
0
 def stats(self, queries, fields, spec=None):
     if spec is None: spec = self._spec_from_index()
     dsl = compile(queries, spec)
     query = {"query": dsl, "aggs": {}, "size": 0}
     for field in fields:
         nested, var = check_nested_label(spec, field)
         # nested aggs
         aggs = {"stats": {"field": var, "missing": 0}}
         if nested:
             for nest1 in nested:
                 aggs = {"nested": {"path": nest1}, "aggs": {field: aggs}}
         query["aggs"][field] = aggs
     r = self._request(self._requests.post,
                       self._host + "/" + self._index + "/_search",
                       json=query)
     aggs = r["aggregations"]
     data = {}
     for field in fields:
         values = aggs
         while field in values:
             values = values[field]
         data[field] = values
     return data