Hello to all Opeansearch expert.
Here is my issue:
I've got a document whose mapping has been done in a way to have an array of composite properties called datasheet, each of them can have a title and a value, like the following
{
"products": {
"description": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
},
"datasheet": {
"properties": {
"title": {
"type": "keyword"
},
"value": {
"type": "keyword"
}
}
}
}
Here is an example of two documents stored in my index:
{
"_id": "01",
"description": "PLACCA 1M BIANCO",
"datasheet": [
{
"title": "numero di elementi di commutazione",
"value": "0"
},
{
"title": "diametro del foro (apertura)",
"value": "0"
},
{
"title": "Trattamento superficie",
"value": "non trattato"
},
{
"title": "qualità del materiale",
"value": "materiale termoplastico"
},
{
"title": "Materiale",
"value": "plastica"
},
{
"title": "direzione di montaggio",
"value": "orizzontale e verticale"
},
{
"title": "codice RAL (simile)",
"value": "9016"
},
{
"title": "Larghezza",
"value": "80"
},
{
"title": "Altezza",
"value": "80"
},
{
"title": "profondità",
"value": "9"
},
{
"title": "larghezza di montaggio",
"value": "80"
},
{
"title": "Altezza della parte incassata",
"value": "80"
},
{
"title": "numero di unità",
"value": "1"
},
{
"title": "con cornice di montaggio",
"value": "si"
},
{
"title": "numero di unità orizzontali",
"value": "1"
},
{
"title": "numero di unità verticali",
"value": "1"
},
{
"title": "numero dei moduli in orizzontale (per costruzione modulare)",
"value": "1"
},
{
"title": "numero dei moduli in verticale (per costruzione modulare)",
"value": "1"
},
{
"title": "tipo di fissaggio",
"value": "fissaggio a morsetto"
},
{
"title": "grado di protezione (IP)",
"value": "IP00"
},
{
"title": "colore",
"value": "bianco"
},
{
"title": "Tipo superficie",
"value": "brillante"
},
{
"title": "casella di testo/superficie di marcatura",
"value": "si"
},
{
"title": "senza alogeni",
"value": "si"
},
{
"title": "trasparente",
"value": "no"
},
{
"title": "con coperchio a cerniera",
"value": "no"
},
{
"title": "adatto per installazione a incasso",
"value": "si"
},
{
"title": "adatto per canale da incasso per apparecchi",
"value": "si"
},
{
"title": "adatto per scatola di canale sotterraneo",
"value": "si"
}
]
}
{
"_id": "02",
"description": "PLACCA 1M AVORIO",
"datasheet": [
{
"title": "casella di testo/superficie di marcatura",
"value": "si"
},
{
"title": "adatto per canale da incasso per apparecchi",
"value": "si"
},
{
"title": "adatto per scatola di canale sotterraneo",
"value": "si"
},
{
"title": "con cornice di montaggio",
"value": "si"
},
{
"title": "diametro del foro (apertura)",
"value": "0"
},
{
"title": "Altezza della parte incassata",
"value": "80"
},
{
"title": "larghezza di montaggio",
"value": "80"
},
{
"title": "profondità",
"value": "9"
},
{
"title": "Altezza",
"value": "80"
},
{
"title": "Larghezza",
"value": "80"
},
{
"title": "codice RAL (simile)",
"value": "9002"
},
{
"title": "numero di elementi di commutazione",
"value": "0"
},
{
"title": "numero dei moduli in verticale (per costruzione modulare)",
"value": "1"
},
{
"title": "numero dei moduli in orizzontale (per costruzione modulare)",
"value": "1"
},
{
"title": "numero di unità verticali",
"value": "1"
},
{
"title": "numero di unità orizzontali",
"value": "1"
},
{
"title": "numero di unità",
"value": "1"
},
{
"title": "qualità del materiale",
"value": "materiale termoplastico"
},
{
"title": "Trattamento superficie",
"value": "non trattato"
},
{
"title": "Tipo superficie",
"value": "brillante"
},
{
"title": "colore",
"value": "bianco"
},
{
"title": "grado di protezione (IP)",
"value": "IP00"
},
{
"title": "tipo di fissaggio",
"value": "fissaggio a morsetto"
},
{
"title": "direzione di montaggio",
"value": "orizzontale e verticale"
},
{
"title": "Materiale",
"value": "plastica"
},
{
"title": "con coperchio a cerniera",
"value": "no"
},
{
"title": "trasparente",
"value": "no"
},
{
"title": "senza alogeni",https://stackoverflow.com/posts/77297386/edit#
"value": "si"
},
{
"title": "adatto per installazione a incasso",
"value": "si"
}
]
}
As you can see, each datasheet properties is a combination of a title and a value. Usually, many documents can have datasheet.title in common, but the value might be different.
Question
I would like to aggregate the documents by the property datasheet, in a way to group all the datasheet.title first, and for each of them I want to aggregate all related datasheet.value (i.e a sort of SQL group by of two columns).
Is it possible to do that? Which type of aggregation do you suggest? Would you mind helping me with an example?
I tried with many types of aggregation, like "terms", "nested", "multi_terms", etc.. but no one gave me the expected results. Perhaps I am using any of them in a wrong way. It would be appreciated any of your suggestion.
Thanks a lot in advance for your time and support.