2013-05-27 16 views
5

che sto facendo una ricerca utilizzando una serie sfaccettatura:Qual è la differenza tra count e total_count su un facet range elasticsearch?

{ 
"query": { 
    "match_all": {} 
}, 
"facets": { 
    "prices": { 
     "range": { 
      "field": "product_price", 
      "ranges": [ 
       {"from": 0, "to": 200}, 
       {"from": 200, "to": 400}, 
       {"from": 400, "to": 600}, 
       {"from": 600, "to": 800}, 
       {"from": 800} 
      ] 
     } 
    } 
} 
} 

E ho avuto come risposta le gamme, come previsto:

[ 
    { 
    "from": 0.0, 
    "to": 200.0, 
    "count": 0, 
    "total_count": 0, 
    "total": 0.0, 
    "mean": 0.0 
    }, 
    { 
    "from": 200.0, 
    "to": 400.0, 
    "count": 1, 
    "min": 399.0, 
    "max": 399.0, 
    "total_count": 1, 
    "total": 399.0, 
    "mean": 399.0 
    }, 
    { 
    "from": 400.0, 
    "to": 600.0, 
    "count": 5, 
    "min": 499.0, 
    "max": 599.0, 
    "total_count": 5, 
    "total": 2886.0, 
    "mean": 577.2 
    }, 
    { 
    "from": 600.0, 
    "to": 800.0, 
    "count": 3, 
    "min": 690.0, 
    "max": 790.0, 
    "total_count": 3, 
    "total": 2179.0, 
    "mean": 726.3333333333334 
    }, 
    { 
    "from": 800.0, 
    "count": 2, 
    "min": 899.0, 
    "max": 990.0, 
    "total_count": 2, 
    "total": 1889.0, 
    "mean": 944.5 
    } 
] 

In tutte le risposte del count e total_count sono gli stessi. Qualcuno sa qual è la differenza tra loro? Quale dovrei usare?

risposta

10

Ottima domanda! Questa parte è difficile dal momento che si vede gli stessi valori la maggior parte del tempo, ma ... quando si utilizza la key_field e value_field è possibile calcolare gli intervalli sulla base di un campo ei dati aggregati (min, max, total_count, total e mean) su un altro campo. Ad esempio, puoi calcolare gli intervalli su un campo di popolarità e vedere i dati aggregati su un campo di prezzo, per vedere per ogni intervallo di popolarità quale tipo di prezzo hai; forse le persone amano prodotti economici o forse no?

Immaginiamo che i tuoi prodotti possano avere più prezzi, diciamo ad esempio un prezzo diverso per paese ... questo è quando hai count che differisce da total_count. Diamo un'occhiata a un esempio.

indice li ha lasciati un paio di documenti che contengono un campo di popolarità e un campo di prezzo, che può avere più valori:

{ 
    "popularity": 50, 
    "price": [28,30,32] 
} 

e

{ 
    "popularity": 120, 
    "price": [50,54] 
} 

Diamo ora eseguire il seguente richiesta di ricerca, che costruisce una gamma di facet usando il campo di popolarità come chiave e il campo del prezzo come valore:

{ 
    "query": { 
     "match_all": {} 
    }, 
    "facets": { 
     "popularity_prices": { 
      "range": { 
       "key_field": "popularity", 
       "value_field": "price", 
       "ranges": [ 
        {"to": 100}, 
        {"from": 100} 
       ] 
      } 
     } 
    } 
} 

Ecco la sfaccettatura ottenuto:

{ 
    "popularity_prices": { 
     "_type": "range", 
     "ranges": [ 
     { 
      "to": 100, 
      "count": 1, 
      "min": 28, 
      "max": 32, 
      "total_count": 3, 
      "total": 90, 
      "mean": 30 
     }, 
     { 
      "from": 100, 
      "count": 1, 
      "min": 50, 
      "max": 54, 
      "total_count": 2, 
      "total": 104, 
      "mean": 52 
     } 
     ] 
    } 
} 

Dovrebbe essere chiaro ora quello che il total_count è. Si riferisce allo value_field (prezzo): 3 valori di prezzo diversi rientrano nel primo intervallo, ma provengono dallo stesso documento. D'altra parte count è il numero di documenti che rientrano nell'intervallo.

Ora che abbiamo anche capito che lo riguarda i documenti mentre lo total_count riguarda i valori di campo, ci si aspetterebbe lo stesso comportamento con un facet di intervallo normale, se il campo contiene più valori ... giusto? Sfortunatamente ciò non accade al momento, il facet della gamma considererà solo il primo valore per ogni campo. Non sono sicuro che si tratti di un bug. Pertanto lo count e lo total_count sono sempre gli stessi.

+0

Si trova nella documentazione da qualche parte? Se sì hai un link? Grazie – jackdbernier

+0

In realtà non l'ho mai letto da nessuna parte, l'ho provato da solo :) Ho letto qualcosa sul "ElasticSearch server book" su più valori, ma non mi era del tutto chiaro. – javanna