Reputation: 7
I'm using python to access elasticsearch index. I have one group of data that I want to order by their key value. When I ordered them result does not seem correct one.
This is my query that I send to my index:
"aggs": {
"Group1": {
"terms": {
"field": "method.keyword",
"include": ".*POST.*",
},
"aggs": {
"Group2": {
"terms": {
"field": "keyword.keyword",
"size": 11593,
},
"aggs": {
"Group3": {
"terms": {
"field": "amount.keyword",
"size": 100,
"order": {"_key": "desc"}
}
}
},
}
},
}
}
This is what the query has returned:
"aggregations": {
"Group1": {
"buckets": [
{
"Group2": {
"buckets": [
{
"Group3": {
"buckets": [
{
"doc_count": 2,
"key": "9"
},
{
"doc_count": 1,
"key": "89"
},
{
"doc_count": 1,
"key": "88"
},
{
"doc_count": 1,
"key": "87"
},
{
"doc_count": 1,
"key": "86"
},
{
"doc_count": 1,
"key": "85"
},
{
"doc_count": 1,
"key": "84"
},
{
"doc_count": 1,
"key": "83"
},
{
"doc_count": 1,
"key": "82"
},
{
"doc_count": 1,
"key": "81"
},
{
"doc_count": 1,
"key": "80"
},
{
"doc_count": 2,
"key": "8"
},
{
"doc_count": 1,
"key": "79"
},
{
"doc_count": 1,
"key": "78"
},
{
"doc_count": 1,
"key": "77"
},
{
"doc_count": 1,
"key": "76"
},
{
"doc_count": 1,
"key": "75"
},
{
"doc_count": 1,
"key": "74"
},
{
"doc_count": 1,
"key": "73"
},
{
"doc_count": 1,
"key": "72"
},
{
"doc_count": 2,
"key": "71"
},
{
"doc_count": 1,
"key": "70"
},
{
"doc_count": 2,
"key": "7"
},
{
"doc_count": 2,
"key": "69"
},
{
"doc_count": 2,
"key": "68"
},
{
"doc_count": 2,
"key": "67"
},
{
"doc_count": 2,
"key": "66"
},
{
"doc_count": 2,
"key": "65"
},
{
"doc_count": 2,
"key": "64"
},
{
"doc_count": 2,
"key": "63"
},
{
"doc_count": 2,
"key": "62"
},
{
"doc_count": 2,
"key": "61"
},
{
"doc_count": 2,
"key": "60"
},
{
"doc_count": 2,
"key": "6"
},
{
"doc_count": 2,
"key": "59"
},
{
"doc_count": 2,
"key": "58"
},
{
"doc_count": 2,
"key": "57"
},
{
"doc_count": 2,
"key": "56"
},
{
"doc_count": 2,
"key": "55"
},
{
"doc_count": 2,
"key": "54"
},
{
"doc_count": 2,
"key": "53"
},
{
"doc_count": 2,
"key": "52"
},
{
"doc_count": 2,
"key": "51"
},
{
"doc_count": 2,
"key": "50"
},
{
"doc_count": 3,
"key": "5"
},
{
"doc_count": 2,
"key": "49"
},
{
"doc_count": 2,
"key": "48"
},
{
"doc_count": 2,
"key": "47"
},
{
"doc_count": 2,
"key": "46"
},
{
"doc_count": 2,
"key": "45"
},
{
"doc_count": 2,
"key": "44"
},
{
"doc_count": 2,
"key": "43"
},
{
"doc_count": 2,
"key": "42"
},
{
"doc_count": 2,
"key": "41"
},
{
"doc_count": 2,
"key": "40"
},
{
"doc_count": 3,
"key": "4"
},
{
"doc_count": 2,
"key": "39"
},
{
"doc_count": 2,
"key": "38"
},
{
"doc_count": 2,
"key": "37"
},
{
"doc_count": 2,
"key": "36"
},
{
"doc_count": 2,
"key": "35"
},
{
"doc_count": 2,
"key": "34"
},
{
"doc_count": 2,
"key": "33"
},
{
"doc_count": 2,
"key": "32"
},
{
"doc_count": 2,
"key": "31"
},
{
"doc_count": 2,
"key": "30"
},
{
"doc_count": 3,
"key": "3"
},
{
"doc_count": 2,
"key": "29"
},
{
"doc_count": 2,
"key": "28"
},
{
"doc_count": 2,
"key": "27"
},
{
"doc_count": 2,
"key": "26"
},
{
"doc_count": 2,
"key": "25"
},
{
"doc_count": 2,
"key": "24"
},
{
"doc_count": 2,
"key": "23"
},
{
"doc_count": 2,
"key": "22"
},
{
"doc_count": 2,
"key": "21"
},
{
"doc_count": 2,
"key": "20"
},
{
"doc_count": 3,
"key": "2"
},
{
"doc_count": 2,
"key": "19"
},
{
"doc_count": 2,
"key": "18"
},
{
"doc_count": 2,
"key": "17"
},
{
"doc_count": 2,
"key": "16"
},
{
"doc_count": 2,
"key": "15"
},
{
"doc_count": 2,
"key": "14"
},
{
"doc_count": 2,
"key": "13"
},
{
"doc_count": 2,
"key": "12"
},
{
"doc_count": 2,
"key": "11"
},
{
"doc_count": 2,
"key": "10"
},
{
"doc_count": 6,
"key": "1"
}
],
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0
},
"doc_count": 167,
"key": "y&price_max"
},
As you see, the key value didn't ordered correctly. How can I order it?
Upvotes: 0
Views: 91
Reputation: 1701
As amount.keyword
is a string value, it has sorted them alphabetically. If you want a numeric sort you need to use a numeric field. For example, if amount
(without the keyword part) is numeric, use that.
Upvotes: 1