Jak uzyskać wartości wszystkich languages
rekordów i uczynić je wyjątkowymi.
Dokumentacja
PUT items/1
{ "language" : 10 }
PUT items/2
{ "language" : 11 }
PUT items/3
{ "language" : 10 }
Pytanie
GET items/_search
{ ... }
# => Expected Response
[10, 11]
Każda pomoc byłaby świetna.
elasticsearch
ChuckJHardy
źródło
źródło
fields: [languages]
poda tylko wartości danego pola, ale uczynienie ich unikalnymi jest prawdopodobnie łatwiejsze w kodzie. Chociaż może istnieć przydatna agregacja, która może zrobić to za Ciebie.Odpowiedzi:
Możesz użyć terminów agregacja .
Wyszukiwanie zwróci coś takiego:
size
Parametr ciągu Określa agregacji maksymalną liczbę terminów do uwzględnienia w wyniku agregacji. Jeśli potrzebujesz wszystkich wyników, ustaw to na wartość większą niż liczba unikalnych terminów w Twoich danych.źródło
"fields" : ["language"]
przynosi ten sam wynik. Czy możesz rozszerzyć swoją odpowiedź, aby sprawdzić, czy struktura agregacji może zwracać tylko wartości języka?#=> [10, 11, 10]
language
możesz chcieć dodaćsize=0
ishard_size=0
, aby upewnić się, że otrzymasz wszystkie wartości. Zobacz flexiblesearch.org/guide/en/elasticsearch/reference/current/…Elasticsearch 1.1+ ma agregację liczebności, która daje unikalną liczbę
Zauważ, że jest to w rzeczywistości przybliżenie, a dokładność może spaść w przypadku zestawów danych o wysokiej kardynalności, ale generalnie jest dość dokładna w moich testach.
Możesz także dostroić dokładność za pomocą
precision_threshold
parametru. Kompromisem jest oczywiście użycie pamięci.Ten wykres z dokumentacji pokazuje, jak wyższy
precision_threshold
prowadzi do znacznie dokładniejszych wyników.źródło
Ja też szukam tego typu rozwiązania dla siebie. Znalazłem odniesienie w kategoriach agregacji .
Tak więc, zgodnie z tym, właściwe rozwiązanie jest następujące.
Ale jeśli napotkasz następujący błąd:
W takim przypadku musisz dodać „ KEYWORD ” w żądaniu, na przykład:
źródło
jeśli chcesz uzyskać pierwszy dokument dla każdej
language
unikalnej wartości pola, możesz to zrobić:źródło
Jeśli chcesz uzyskać wszystkie unikalne wartości bez żadnego przybliżenia lub ustawiania magicznej liczby (
size: 500
), użyj AGREGACJI KOMPOZYTU (ES 6.5+) .Z oficjalnej dokumentacji :
„Jeśli chcesz pobrać wszystkie terminy lub wszystkie kombinacje terminów w zagnieżdżonej agregacji terminów , powinieneś użyć AGREGACJI ZŁOŻONEJ, która umożliwia stronicowanie wszystkich możliwych terminów zamiast ustawiania rozmiaru większego niż liczność pola w agregacji terminów. agregacja terminów ma na celu zwrócenie najpopularniejszych terminów i nie pozwala na podział na strony ”.
Przykład implementacji w JavaScript:
źródło