Ich bin relativ neu bei elasticsearch und möchte eines meiner Felder einer associative array
Struktur zuordnen.
Was ich derzeit habe:
Ein Produkt vom Typ product
im Index products
:
Wie Sie sehen können, ist das Feld interests
ein assoziatives Array. Der Schlüssel ist ein User ID
und der Wert ist the number of times the user talked about this product
.
Dynamisches Mapping hat mir Folgendes zur Verfügung gestellt:
%Vor%Was ich will:
Da ich viele Einträge im Feld interests
haben werde, möchte ich nicht, dass das dynamische Mapping jede ID abbildet.
Die Idee ist, nach einem bestimmten user ID
im Feld interests
zu suchen, damit ich die Punktzahl des Ergebnisses erhöhen kann, je nachdem, wie oft dieser bestimmte Benutzer über dieses Produkt gesprochen hat.
Ich möchte diese Art von Struktur abbilden können.
Haben Sie eine Idee, wie Sie das erreichen können?
Danke,
Sie müssen Ihre Objektdefinitionen ändern.
Es ist problematisch, Schlüssel basierend auf den tatsächlichen Werten zu haben, da dies zu einem ständig wachsenden Mapping- und damit Cluster-Zustand führt. Es wird auch zu seltsamen Suchen führen.
Dies ist eine häufig genug gestellte Frage, die ich in meinem Artikel über Fehlerbehebung einem Abschnitt gewidmet habe Elasticsearch sucht nach Anfängern .
Wahrscheinlich möchten Sie verschachtelte Dokumente oder Eltern-Kind-Beziehungen verwenden. Wenn Sie die Anzahl sehr oft aktualisieren, sollten Sie parent-child verwenden, da verschachtelte Dokumente die gesamte Sache neu indizieren. Verschachteltes Dokument wird jedoch eine schnellere Suchzeit haben, und Sie werden die Aktualisierungen wahrscheinlich sowieso irgendwie drosseln wollen.
Wenn Sie die Dokumente so strukturieren, können Sie einfach verschachtelte Zuordnungen verwenden, und Sie werden nicht mit einem Feld pro Benutzer enden.
%Vor%Tags und Links elasticsearch