* [Opis bazy](#opis-bazy)
* [MongoDB](#mongodb)
* [Import bazy do mongo](#import-bazy-do-mongo)
* [Pierwsza agregacja](#pierwsza-aggregacja)
* [Druga agregacja](#druga-aggregacja)
* [Elasticsearch](#elasticsearch)
* [Import elasticsearch](#import-elasticsearch)
* [Pierwsza agregacja](#pierwsza-aggregacja-elasticsearch)
* [Druga agregacja](#druga-aggregacja-elasticsearch)
Baza została pobrana w formacie CSV i została oczyszczona za pomocą google refine. Baze danych pobralem ze strony: http://openstates.org/downloads/ dla miasta NY w USA.
MongoDB shell version: 2.4.7
mongoimport --db vote --collection votes --type csv --file C:/votes.csv
> db.vote.count()
Ilosc rekordów : 886182
> db.vote.findOne()
{
"_id" : ObjectId("52b349e1093c8062d690c84d"),
"vote_id" : "NYV00004655",
"leg_id" : "NYL000025",
"name" : "Johnson",
"vote" : "yes"
}
Wyświetlenie ile zostało oddanych pozytywnych, negatywnych głosów bądź ile osób powstrzymało sie od niego.
> db.vote.aggregate({ $group: { _id: "$vote", sumka: {$sum: 1}}})
{
"result" : [
{
"_id" : "other",
"sumka" : 34590
},
{
"_id" : "no",
"sumka" : 41807
},
{
"_id" : "yes",
"sumka" : 809785
}
],
"ok" : 1
}
Top 5 osób które oddały najwięcej głosów.
> db.vote.aggregate( [ { $match : { vote : "yes"}}, {$group: { _id: "$name", suma : {$sum: 1 }}}, { $limit: 5 }, { $sort : { suma : -1, posts: 1 } }])
{
"result" : [
{
"_id" : "Duprey",
"suma" : 2877
},
{
"_id" : "Meng",
"suma" : 1222
},
{
"_id" : "Fahy",
"suma" : 1074
},
{
"_id" : "Santaba",
"suma" : 1046
},
{
"_id" : "DiPietr",
"suma" : 762
}
],
"ok" : 1
}
Elasticsearch version : 0.90.9
Wrzuciłem bazę w częściach, ze względu na duży rozmiar danych.
curl localhost:9200/vote/_bulk --data-binary @vote1.bulk
Wyświetlenie ile zostało oddanych pozytywnych, negatywnych głosów bądź ile osób powstrzymało się od niego:
{
"query":{
"match_all":{}
},
"facets":
{
"tags":
{"terms":
{"field":"vote"}
}
}
}
Top 5 osób które oddały najwięcej głosów.
{
"query" : {
"query_string" : {
"query" : "yes"
}
},
"filter" : {
"term" : {
"tag" : "vote"
}
},
"facets" : {
"format" : {
"terms" : {
"field" : "name"
}
}
}
}