Como obter os valores de todos languages
os registros e torná-los únicos.
Registros
PUT items/1
{ "language" : 10 }
PUT items/2
{ "language" : 11 }
PUT items/3
{ "language" : 10 }
Inquerir
GET items/_search
{ ... }
# => Expected Response
[10, 11]
Qualquer ajuda seria ótimo.
elasticsearch
ChuckJHardy
fonte
fonte
fields: [languages]
fornecerá apenas os valores do campo especificado, mas torná-los únicos é provavelmente mais fácil de fazer no código. Embora possa haver, existe uma agregação útil que pode fazer isso por você.Respostas:
Você pode usar os termos de agregação .
Uma pesquisa retornará algo como:
O
size
parâmetro na agregação especifica o número máximo de termos a serem incluídos no resultado da agregação. Se você precisar de todos os resultados, defina-o como um valor maior que o número de termos exclusivos em seus dados.fonte
"fields" : ["language"]
traz de volta o mesmo resultado. Você pode expandir sua resposta para ver se a estrutura de agregação pode retornar apenas os valores de idioma?#=> [10, 11, 10]
language
poderá adicionarsize=0
eshard_size=0
, para obter todos os valores. Veja elasticsearch.org/guide/en/elasticsearch/reference/current/…O Elasticsearch 1.1+ possui a agregação de cardinalidade, que fornece uma contagem única
Observe que na verdade é uma aproximação e a precisão pode diminuir com os conjuntos de dados de alta cardinalidade, mas geralmente é bastante preciso nos meus testes.
Você também pode ajustar a precisão com o
precision_threshold
parâmetro O trade-off, ou claro, é o uso de memória.Este gráfico dos documentos mostra como um aumento
precision_threshold
leva a resultados muito mais precisos.fonte
se você deseja obter o primeiro documento para cada
language
valor exclusivo de campo, pode fazer o seguinte:fonte
Também estou procurando esse tipo de solução para mim. Encontrei referência em termos de agregação .
Portanto, de acordo com o que segue, é a solução adequada.
Mas se você encontrou o seguinte erro:
Nesse caso, você deve adicionar " KEYWORD " na solicitação, como a seguir:
fonte
Se você deseja obter todos os valores exclusivos sem aproximações ou definir um número mágico (
size: 500
), use COMPOSITE AGGREGATION (ES 6.5+) .Da documentação oficial :
"Se você deseja recuperar todos os termos ou todas as combinações de termos em uma agregação de termos aninhados, use a COMPOSITE AGGREGATION que permite paginar todos os termos possíveis em vez de definir um tamanho maior que a cardinalidade do campo na agregação de termos. A agregação de termos deve retornar os principais termos e não permite a paginação ".
Exemplo de implementação em JavaScript:
fonte