2015-04-24 5 views
7

Ich bin wirklich neu in elasticsearch Welt.Elasticsearch Filteraggregationen auf minimalen Doc-Anzahl

Lassen Sie uns sagen, dass ich eine verschachtelte Aggregation auf zwei Felder: field1 und field2:

{ 
    ... 
    aggs: { 
     field1: { 
      terms: { 
       field: 'field1' 
      }, 
      aggs: { 
       field2: { 
        terms: { 
         field: 'field2' 
        } 
       } 
      } 
     } 
    } 
} 

Dieses Stück Code funktioniert perfekt und gibt mir etwas wie folgt aus:

aggregations: { 
    field1: { 
     buckets: [{ 
      key: "foo", 
      doc_count: 123456, 
      field2: { 
       buckets: [{ 
        key: "bar", 
        doc_count: 34323 
       },{ 
        key: "baz", 
        doc_count: 10 
       },{ 
        key: "foobar", 
        doc_count: 36785 
       }, 
       ... 
       ] 
     },{ 
      key: "fooOO", 
      doc_count: 423424, 
      field2: { 
       buckets: [{ 
        key: "bar", 
        doc_count: 35 
       },{ 
        key: "baz", 
        doc_count: 2435453 
       }, 
       ... 
       ] 
     }, 
     ... 
     ] 
    } 
} 

Nun, mein Bedürfnis ist, alle Aggregationsergebnisse auszuschließen, wobei doc_count zum Beispiel weniger als 1000 ist, und erhalten stattdessen:

aggregations: { 
    field1: { 
     buckets: [{ 
      key: "foo", 
      doc_count: 123456, 
      field2: { 
       buckets: [{ 
        key: "bar", 
        doc_count: 34323 
       },{ 
        key: "foobar", 
        doc_count: 36785 
       }, 
       ... 
       ] 
     },{ 
      key: "fooOO", 
      doc_count: 423424, 
      field2: { 
       buckets: [{ 
        key: "baz", 
        doc_count: 2435453 
       }, 
       ... 
       ] 
     }, 
     ... 
     ] 
    } 
} 

Ist es möglich, diesen Bedarf im Abfragetext festzulegen? Oder muss ich den Filter im Caller-Layout (in meinem Fall Javascript) durchführen?

Vielen Dank im Voraus

Antwort

16

Das nächste Mal, M'sieur Toph‘: RTFM !!!

Ich fühle mich wirklich dumm: Ich fand den Verstärker in der Bedienungsanleitung, 30 Sekunden nach der Frage. Ich entferne meine Frage nicht, weil es helfen kann, wer weiß ...

Hier ist der anwser:

Sie können die min_doc_count Eigenschaft in der terms Aggregation angeben.

Es gibt Ihnen:

{ 
    ... 
    aggs: { 
     field1: { 
      terms: { 
       field: 'field1', 
       min_doc_count: 1000 
      }, 
      aggs: { 
       field2: { 
        terms: { 
         field: 'field2', 
         min_doc_count: 1000 
        } 
       } 
      } 
     } 
    } 
} 

Sie können auch eine bestimmte minimale Anzahl für jede Ebene Ihrer Aggregation angeben.

Was noch? :)