2015-04-24 22 views
7

Sono davvero nuovo nel mondo elasticsearch.Aggregazioni di filtri Elasticsearch su numero minimo di documenti

Diciamo che ho un'aggregazione nidificato su due campi: field1 e field2:

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

Questo pezzo di codice funziona perfettamente e mi dà qualcosa di simile:

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 
       }, 
       ... 
       ] 
     }, 
     ... 
     ] 
    } 
} 

Ora, il mio bisogno è quello di escludere tutti i risultati di aggregazione dove doc_count è minore di 1000 per esempio e ottenere questo invece:

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 
       }, 
       ... 
       ] 
     }, 
     ... 
     ] 
    } 
} 

È possibile impostare questa necessità nel corpo della query? o devo eseguire il filtro nel layout del chiamante (in javascript nel mio caso)?

Grazie in anticipo

risposta

16

la prossima volta, M'sieur Toph': RTFM !!!

Mi sento davvero stupido: ho trovato il manuale nel manuale, 30 secondi dopo averlo chiesto. Non rimuovere la mia domanda, perché, può aiutare, chi lo sa ...

Ecco l'anwser:

È possibile specificare la proprietà min_doc_count nel terms aggregazione.

Ti dà:

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

È inoltre possibile specificare uno specifico numero minimo per ogni livello della vostra aggregazione.

Cos'altro? :)

Problemi correlati