TL; DR – Ao executar múltiplas facetas estatísticas com o mesmo nome, ElasticSearch irá catenar os dados de todos os campos ao executar os resultados. Usando o invólucro Ruby’s Tire no ElasticSearch, apenas a última faceta nomeada será enviada para ElasticSearch.
Os dados nesses exemplos são triviais, mas fazem um trabalho claro ilustrando esse ‘recurso’ não intencional.
Exemplo 1
Sales.search do
query { all }
facet 'stats' do
statistical :amount
end
puts to_curl
end
curl -X GET 'http://localhost:9200/sales/sale/_search?size=10&pretty' -d '{"query":{"match_all":{}},"facets":{"stats":{"statistical":{"field":"amount"}}},"size":10}'
@facets={"stats"=>{"_type"=>"statistical",
"count"=>1476,
"total"=>865389.1399999999,
"min"=>1.0, "max"=>9289.0,
"mean"=>586.3070054200541,
"sum_of_squares"=>1252317429.8326,
"variance"=>504697.63864238764,
"std_deviation"=>710.4207476153745}}
Exemplo 2
Sales.search do
query { all }
facet 'stats' do
statistical :id
end
puts to_curl
end
curl -X GET 'http://localhost:9200/sales/sale/_search?size=10&pretty' -d '{"query":{"match_all":{}},"facets":{"stats":{"statistical":{"field":"id"}}},"size":10}'
@facets={"stats"=>{"_type"=>"statistical",
"count"=>20,
"total"=>34.0,
"min"=>1.0,
"max"=>4.0,
"mean"=>1.7,
"sum_of_squares"=>78.0,
"variance"=>1.0100000000000002,
"std_deviation"=>1.0049875621120892}}
Exemplo 3
Sales.search do
query { all }
facet 'stats' do
statistical :id
end
facet 'stats' do
statistical :amount
end
puts to_curl
end
curl -X GET 'http://localhost:9200/sales/sale/_search?size=10&pretty' -d '{"query":{"match_all":{}},"facets":{"stats":{"statistical":{"field":"amount"}}},"size":10}'
@facets={"stats"=>{"_type"=>"statistical",
"count"=>1476,
"total"=>865389.1399999999,
"min"=>1.0,
"max"=>9289.0,
"mean"=>586.3070054200541,
"sum_of_squares"=>1252317429.8326,
"variance"=>504697.63864238764,
"std_deviation"=>710.4207476153745}}
Observe acima que Tiro ignorou a primeira faceta e enviou apenas a segunda.
Exemplo 4
Solicitação de curl manuscrita, sem embalagem de pneu
curl -X GET 'http://localhost:9200/sales/sale/_search?size=10&pretty' -d '{"query":{"match_all":{}},"facets":{"stats":{"statistical":{"field":"amount"}},"stats":{"statistical":{"field":"id"}}},"size":10}'
"facets" : {
"stats" : {
"_type" : "statistical",
"count" : 1496,
"total" : 865423.1399999999,
"min" : 1.0,
"max" : 9289.0,
"mean" : 578.4914037433155,
"sum_of_squares" : 1.2523175078326E9,
"variance" : 502458.32937302964,
"std_deviation" : 708.8429511344735
},
"stats" : {
"_type" : "statistical",
"count" : 1496,
"total" : 865423.1399999999,
"min" : 1.0,
"max" : 9289.0,
"mean" : 578.4914037433155,
"sum_of_squares" : 1.2523175078326E9,
"variance" : 502458.32937302964,
"std_deviation" : 708.8429511344735
}
}
Aqui, ambas as facetas são registradas e ambas contêm informações de ambos os campos.
consulte: http://elasticsearch-users.115913.n3.nabble.com/Statistically-facet-on-multiple-fields-td1676993.html para uma discussão sobre o assunto.
consulte também: http://www.elasticsearch.org/guide/reference/api/search/facets/statistically-facet/ para saber a maneira adequada de executar intencionalmente uma faceta de vários campos.