Ich versuche, verwandte Tags zu der aktuell angezeigten zu finden. Jedes Dokument in unserem Index ist markiert. Jeder Tag besteht aus zwei Teilen - einen ID und Textname:So erhalten Sie eine Elasticsearch-Aggregation mit mehreren Feldern
{
...
meta: {
...
tags: [
{
id: 123,
name: 'Biscuits'
},
{
id: 456,
name: 'Cakes'
},
{
id: 789,
name: 'Breads'
}
]
}
}
holt die verwandten Tags bin ich einfach die Dokumente abfragen und ein Aggregat von ihrem Tags erhalten:
{
"query": {
"bool": {
"must": [
{
"match": {
"item.meta.tags.id": "123"
}
},
{
...
}
]
}
},
"aggs": {
"baked_goods": {
"terms": {
"field": "item.meta.tags.id",
"min_doc_count": 2
}
}
}
}
Das funktioniert perfekt Ich bekomme die Ergebnisse, die ich möchte. Allerdings benötige ich sowohl die Tag-ID als auch den Namen, um etwas Nützliches zu tun. Ich habe untersucht, wie dies zu erreichen, scheinen die Lösungen zu sein:
- die Felder kombinieren, wenn
- Ein Skript Indizierung der Felder
- Eine verschachtelte Aggregation
Option ein bis munge zusammen und Zwei sind nicht verfügbar für mich, also habe ich mit 3, aber es reagiert nicht in der erwarteten Weise. Given (noch auf der Suche nach Dokumenten auch mit ‚Biscuits‘ markiert) die folgenden Abfrage:
{
...
"aggs": {
"baked_goods": {
"terms": {
"field": "item.meta.tags.id",
"min_doc_count": 2
},
"aggs": {
"name": {
"terms": {
"field": "item.meta.tags.name"
}
}
}
}
}
}
ich dieses Ergebnis erhalten:
{
...
"aggregations": {
"baked_goods": {
"buckets": [
{
"key": "456",
"doc_count": 11,
"name": {
"buckets": [
{
"key": "Biscuits",
"doc_count": 11
},
{
"key": "Cakes",
"doc_count": 11
}
]
}
}
]
}
}
}
Die verschachtelte Aggregation umfasst sowohl den Suchbegriff und den Tag Ich bin nach (in alphabetischer Reihenfolge).
Ich habe versucht, dies zu mildern, indem Sie eine exclude
der verschachtelten Aggregation hinzufügen, aber dies verlangsamte die Abfrage viel zu viel (etwa 100 mal für 500000 Dokumente). Bisher ist die schnellste Lösung, das Ergebnis manuell zu entfernen.
Was ist der beste Weg, um eine Zusammenfassung von Tags mit der Tag-ID und dem Tag-Namen in der Antwort zu erhalten?
Danke, dass Sie es bis hierher geschafft haben!
@i_like_robots Ich bin neugierig, Hast du meine vorgeschlagene Lösung getestet? –
er entschied sich, das Kopfgeld für sich selbst zu behalten, danke für die gute Antwort! – asktomsk
Am Ende, ja! Wir konnten schließlich die Zeit damit verbringen, einen neuen Index mit richtig verschachtelten Feldern zu erstellen, aber ich fürchte, es war erst vor kurzem. Vielen Dank für deine Zeit, meine Frage zu beantworten und ich entschuldige mich dafür, dass ich die Stack Overflow-Etikette vernachlässige! –