Ho riscontrato un problema che elasticsearch non è riuscito a restituire il conteggio dei documenti univoci semplicemente utilizzando l'aggregazione dei termini in un campo nidificato.come restituire il conteggio dei documenti univoci utilizzando l'aggregazione elasticsearch
Ecco un esempio del nostro modello:
{
...,
"location" : [
{"city" : "new york", "state" : "ny"},
{"city" : "woodbury", "state" : "ny"},
...
],
...
}
voglio fare aggregazione sul campo dello stato, ma questo documento saranno contati due volte nel secchio 'ny' poiche 'ny' compare due volte nel documento.
Quindi mi chiedo se dov'è un modo per prendere il conteggio di documenti distinti.
mappatura:
people = {
:properties => {
:location => {
:type => 'nested',
:properties => {
:city => {
:type => 'string',
:index => 'not_analyzed',
},
:state => {
:type => 'string',
:index => 'not_analyzed',
},
}
},
:last_name => {
:type => 'string',
:index => 'not_analyzed'
}
}
}
la query è piuttosto semplice:
curl -XGET 'http://localhost:9200/people/_search?pretty&search_type=count' -d '{
"query" : {
"bool" : {
"must" : [
{"term" : {"last_name" : "smith"}}
]
}
},
"aggs" : {
"location" : {
"nested" : {
"path" : "location"
},
"aggs" : {
"state" : {
"terms" : {"field" : "location.state", "size" : 10}
}
}
}
}
}'
La risposta:
{
"took" : 104,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1248513,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"location" : {
"doc_count" : 2107012,
"state" : {
"buckets" : [ {
"key" : 6,
"key_as_string" : "6",
"doc_count" : 214754
}, {
"key" : 12,
"key_as_string" : "12",
"doc_count" : 168887
}, {
"key" : 48,
"key_as_string" : "48",
"doc_count" : 101333
} ]
}
}
}
}
Il doc_count è molto più grande del totale nel colpo. Quindi ci devono essere dei duplicati.
Grazie!
Pubblica la tua mappatura di quell'indice e la query che stai utilizzando, altrimenti non posso aiutarti. –
@AndreiStefan Ho aggiornato la mappatura e la query. Grazie! – milodky