Wie würde ich die Werte aller languages
aus den Datensätzen erhalten und sie einzigartig machen?
Aufzeichnungen
PUT items/1
{ "language" : 10 }
PUT items/2
{ "language" : 11 }
PUT items/3
{ "language" : 10 }
Abfrage
GET items/_search
{ ... }
# => Expected Response
[10, 11]
Jede Hilfe wäre großartig.
elasticsearch
ChuckJHardy
quelle
quelle
fields: [languages]
gibt nur die Werte des angegebenen Feldes an, aber es ist wahrscheinlich einfacher, sie im Code eindeutig zu machen. Möglicherweise gibt es eine praktische Aggregation, die dies für Sie erledigen kann.Antworten:
Sie können die Begriffe Aggregation verwenden .
Eine Suche gibt ungefähr Folgendes zurück:
Der
size
Parameter innerhalb der Aggregation gibt die maximale Anzahl von Begriffen an, die in das Aggregationsergebnis aufgenommen werden sollen. Wenn Sie alle Ergebnisse benötigen, setzen Sie diesen Wert auf einen Wert, der größer ist als die Anzahl der eindeutigen Begriffe in Ihren Daten.quelle
"fields" : ["language"]
bringt das gleiche Ergebnis zurück. Können Sie Ihre Antwort erweitern, um festzustellen, ob das Aggregationsframework nur die Sprachwerte zurückgeben kann?#=> [10, 11, 10]
language
, möglicherweise hinzufügensize=0
undshard_size=0
, um sicherzustellen, dass Sie alle Werte erhalten. Siehe elasticsearch.org/guide/en/elasticsearch/reference/current/…Elasticsearch 1.1+ verfügt über die Kardinalitätsaggregation , mit der Sie eine eindeutige Anzahl erhalten
Beachten Sie, dass es sich tatsächlich um eine Annäherung handelt und die Genauigkeit bei Datensätzen mit hoher Kardinalität möglicherweise abnimmt, bei meinen Tests jedoch im Allgemeinen ziemlich genau ist.
Sie können die Genauigkeit auch mit dem
precision_threshold
Parameter einstellen. Der Kompromiss oder Kurs ist die Speichernutzung.Diese Grafik aus den Dokumenten zeigt, wie ein höherer
precision_threshold
Wert zu viel genaueren Ergebnissen führt.quelle
Wenn Sie das erste Dokument für jeden
language
eindeutigen Feldwert erhalten möchten , können Sie Folgendes tun:quelle
Ich suche diese Art von Lösung auch für mich. Ich fand Referenz in Bezug auf Aggregation .
Demnach ist das Folgende die richtige Lösung.
Aber wenn Sie auf folgenden Fehler gestoßen sind:
In diesem Fall müssen Sie der Anforderung " KEYWORD " hinzufügen , wie folgt:
quelle
Wenn Sie alle eindeutigen Werte ohne Annäherung oder Festlegen einer magischen Zahl (
size: 500
) erhalten möchten , verwenden Sie COMPOSITE AGGREGATION (ES 6.5+) .Aus der offiziellen Dokumentation :
"Wenn Sie alle Begriffe oder alle Kombinationen von Begriffen in einer verschachtelten Begriffsaggregation abrufen möchten, sollten Sie die COMPOSITE AGGREGATION verwenden , mit der Sie über alle möglichen Begriffe paginieren können, anstatt eine Größe festzulegen, die größer ist als die Kardinalität des Felds in der Begriffsaggregation Die Aggregation von Begriffen soll die Top-Begriffe zurückgeben und erlaubt keine Paginierung. "
Implementierungsbeispiel in JavaScript:
quelle