Ich habe ein Problem mit verschachtelten Aggregation in Elasticsearch. Ich habe Mapping mit verschachteltem Feld:Elasticsearch. Terms Aggregation auf geschachteltem Feld mit doppelten Werten
POST my_index/ my_type/_mapping
{
"properties": {
"name": {
"type": "keyword"
},
"nested_fields": {
"type": "nested",
"properties": {
"key": {
"type": "keyword"
},
"value": {
"type": "keyword"
}
}
}
}
}
Dann füge ich ein Dokument zu indizieren:
POST my_index/ my_type
{
"name":"object1",
"nested_fields":[
{
"key": "key1",
"value": "value1"
},
{
"key": "key1",
"value": "value2"
}
]
}
Wie Sie sehen, in meiner verschachtelten Array ich zwei Teile, die zum key
Feld ähnlich, aber anders value
Feld. Dann möchte ich eine solche Abfrage machen:
GET/my_index/my_type/_search
{
"query": {
"nested": {
"path": "nested_fields",
"query": {
"bool": {
"must": [
{
"term": {
"nested_fields.key": {
"value": "key1"
}
}
},
{
"terms": {
"nested_fields.value": [
"value1",
"value2"
]
}
}
]
}
}
}
},
"aggs": {
"agg_nested_fields": {
"nested": {
"path": "nested_fields"
},
"aggs": {
"agg_nested_fields_key": {
"terms": {
"field": "nested_fields.key",
"size": 10
}
}
}
}
}
}
Wie Sie sehen, ich will alle Dokumente finden, die mindestens ein Objekt in nested_field
Array haben, mit key
Eigenschaft gleich key1
und einer der verfügbaren Werte (value1
oder value2
). Dann möchte ich fundierte Dokumente von nested_fields.key
gruppieren. Aber ich habe solche Antwort
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.87546873,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "AVuLNXxiryKmA7VEwOfV",
"_score": 0.87546873,
"_source": {
"name": "object1",
"nested_fields": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key1",
"value": "value2"
}
]
}
}
]
},
"aggregations": {
"agg_nested_fields": {
"doc_count": 2,
"agg_nested_fields_key": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "key1",
"doc_count": 2
}
]
}
}
}
}
Wie Sie aus der Antwort zu sehen, habe ich einen Treffer (es ist richtig), aber das Dokument zweimal in Aggregation gezählt wurde (siehe doc_count: 2
), weil es zwei Elemente mit ' Schlüssel1 'Wert in nested_fields
Array. Wie kann ich die richtige Anzahl an Aggregationen erhalten?
Das ist die richtige Anzahl, da jedes verschachtelte Element ein eigenes Dokument ist. Sie haben also wirklich zwei verschachtelte Dokumente, die 'Schlüssel1' als Schlüssel und entweder' Wert1' oder 'Wert2' als Wert haben. – Val
Ja, ich brauche das. Wie kann ich dieses Problem lösen? – Stalso
hilft das https://stackoverflow.com/a/27578607/7379424? –