2014-09-20 11 views
5

Ich versuche, innerhalb einer verschachtelten, Filter Aggregation einen verschachtelten Abfrage-Filter zu verwenden. Wenn ich dies tue, kehrt die Aggregation ohne Elemente zurück. Wenn ich die Abfrage in einen einfachen alten match_all-Filter ändere, bekomme ich die Elemente zurück in den Bucket. HierVerschachtelte Abfrage in verschachtelten Filter Aggregierung

ist eine vereinfachte Version des Mappings Ich arbeite mit:

"player": { 
    "properties": { 
    "rating": { 
     "type": "float" 
    }, 
    "playerYears": { 
     "type": "nested", 
     "properties": { 
     "schoolsOfInterest": { 
      "type": "nested", 
      "properties": { 
      "name": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Diese Abfrage mit einem match_all Filter auf die Aggregation:

GET /players/_search 
{ 
    "size": 0, 
    "aggs": { 
    "rating": { 
     "nested": { 
     "path": "playerYears" 
     }, 
     "aggs": { 
     "rating-filtered": { 
      "filter": { 
       "match_all": {} 
      }, 
      "aggs": { 
      "rating": { 
       "histogram": { 
       "field": "playerYears.rating", 
       "interval": 1 
       } 
      } 
      } 
     } 
     } 
    } 
    }, 
    "query": { 
    "filtered": { 
     "filter": { 
     "match_all": {} 
     } 
    } 
    } 
} 

gibt die folgende:

{ 
    "took": 16, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 167316, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "rating": { 
     "doc_count": 363550, 
     "rating-filtered": { 
      "doc_count": 363550, 
      "rating": { 
       "buckets": [ 
        { 
        "key_as_string": "-1", 
        "key": -1, 
        "doc_count": 20978 
        }, 
        { 
        "key_as_string": "0", 
        "key": 0, 
        "doc_count": 312374 
        }, 
        { 
        "key_as_string": "1", 
        "key": 1, 
        "doc_count": 1162 
        }, 
        { 
        "key_as_string": "2", 
        "key": 2, 
        "doc_count": 12104 
        }, 
        { 
        "key_as_string": "3", 
        "key": 3, 
        "doc_count": 9558 
        }, 
        { 
        "key_as_string": "4", 
        "key": 4, 
        "doc_count": 5549 
        }, 
        { 
        "key_as_string": "5", 
        "key": 5, 
        "doc_count": 1825 
        } 
       ] 
      } 
     } 
     } 
    } 
} 

Aber diese Abfrage, die einen verschachtelten Filter in der Aggregation hat, gibt einen leeren Eimer:

GET /players/_search 
{ 
    "size": 0, 
    "aggs": { 
    "rating": { 
     "nested": { 
     "path": "playerYears" 
     }, 
     "aggs": { 
     "rating-filtered": { 
      "filter": { 
       "nested": { 
       "query": { 
        "match_all": {} 
       }, 
       "path": "playerYears.schoolsOfInterest" 
      } 
      }, 
      "aggs": { 
      "rating": { 
       "histogram": { 
       "field": "playerYears.rating", 
       "interval": 1 
       } 
      } 
      } 
     } 
     } 
    } 
    }, 
    "query": { 
    "filtered": { 
     "filter": { 
     "match_all": {} 
     } 
    } 
    } 
} 

die leeren Eimer:

{ 
    "took": 8, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 167316, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "rating": { 
     "doc_count": 363550, 
     "rating-filtered": { 
      "doc_count": 0, 
      "rating": { 
       "buckets": [] 
      } 
     } 
     } 
    } 
} 

Ist es möglich, verschachtelte Filter innerhalb von verschachtelten, gefiltert Aggregationen zu benutzen? Gibt es einen bekannten Fehler in elasticsearch? Der geschachtelte Filter funktioniert im Abfragekontext der Suche und funktioniert einwandfrei, wenn ich keine verschachtelte Aggregation verwende.

+0

können Sie bitte den folgenden Teil in Nested Filter Aggregation versuchen? "Aggs": { "rating-gefilterten": { "Filter": { "verschachtelt": { "Filter": { "match_all": { }}, "path": „playerYears.schoolsOfInterest " } }, –

+0

War die einzige Änderung von einer Abfrage zu einem Filter? Wenn ja, habe ich es versucht, und keine Würfel. immer noch keine Ergebnisse :( – Bennidhamma

+0

können Sie bitte einige Beispieldokumente zur Verfügung stellen? –

Antwort

11

Basierend auf den bereitgestellten Informationen und einigen Annahmen möchte ich zwei Vorschläge machen. Ich hoffe es hilft Ihr Problem zu lösen.

Fall 1: unter Verwendung der reversen verschachtelte Aggregation:

{ 
    "size": 0, 
    "query": { 
    "match_all": {} 
    }, 
    "aggs": { 
    "rating": { 
     "nested": { 
     "path": "playerYears.schoolsOfInterest" 
     }, 
     "aggs": { 
     "rating-filtered": { 
      "filter": { 
      "match_all": {} 
      }, 
      "aggs": { 
      "rating_nested": { 
       "reverse_nested": {}, 
       "aggs": { 
       "rating": { 
        "histogram": { 
        "field": "rating", 
        "interval": 1 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Fall 2: Änderungen gefiltert Aggregation:

{ 
    "size": 0, 
    "aggs": { 
    "rating-filtered": { 
     "filter": { 
     "nested": { 
      "query": { 
      "match_all": {} 
      }, 
      "path": "playerYears.schoolsOfInterest" 
     } 
     }, 
     "aggs": { 
     "rating": { 
      "histogram": { 
      "field": "playerYears.rating", 
      "interval": 1 
      } 
     } 
     } 
    } 
    }, 
    "query": { 
    "filtered": { 
     "filter": { 
     "match_all": {} 
     } 
    } 
    } 
} 

Ich würde vorschlagen, Sie Fall 1 zu verwenden und Ihre erforderlichen überprüfen Ergebnisse.

+0

Ich denke, das wird funktionieren !! – Bennidhamma

Verwandte Themen