kullanarak benzersiz belgelerin sayısını nasıl döndüreceğimi elasticsearch'in, iç içe geçmiş bir alandaki terimler kümelenmesini kullanarak benzersiz belge sayısını iade edememesiyle ilgili bir sorunla karşılaştım. İşte elasticsearch aggregation
bizim modelin bir örnek:{
...,
"location" : [
{"city" : "new york", "state" : "ny"},
{"city" : "woodbury", "state" : "ny"},
...
],
...
}
Ben devlet sahada toplanmasına yapmak istiyorum, ama 'ny' iki kez göründüğü için bu belge 'ny' kovada iki defa sayılır belgesi.
Farklı belgelerin sayımını yapmanın bir yolu olup olmadığını merak ediyorum.
haritalama:
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'
}
}
}
sorgu oldukça basittir:
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}
}
}
}
}
}'
cevabı:
{
"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
} ]
}
}
}
}
doc_count isabet toplam çok daha büyüktür. Yani çiftler olmalı.
Teşekkürler!
Bu dizininizi ve kullandığınız sorguyu eşleştirin, aksi takdirde size yardımcı olamam. –
@AndreiStefan Haritalamayı ve sorguyu güncelledim. Teşekkürler! – milodky