需要在elasticsearch中对_term进行排序
我有一个索引器,其中包含一个名为“
billingSequence”的字段。映射中该字段的数据类型为String,并且该字段的每个记录的值可以是1到30之间的一个。我使用此字段进行聚合,并且在尝试对_terms进行排序时,该字段的排序不正确是字符串类型。
{ "aggs": {
"count": {
"terms": {
"field": "billingSequence"
, "order" : { "_term" : "asc" }
}
}
}
}
上述聚合排序的结果是-1 11 12 13 14 15 16 17 18 19 2 3 4 5等。
预期结果是-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16等
如果有人可以研究并提供帮助,那将是一个很大的帮助。
谢谢..
回答:
这是因为您正在对字符串进行排序,并且字符串的词法顺序与这些字符串所表示的数字顺序不同。
对于字符串:“11”来 “2”,因为“1”是之前“2”
对于数字:11 明显排 2 。
解决方案是将billingSequence
字段映射为整数而不是字符串。
{ "billingSequence": {
"type": "integer"
}
}
请注意,您需要首先擦除索引(1),重新创建索引并安装上述映射(2),最后重新索引数据(3)。然后您的聚合将按预期工作。
curl -XDELETE localhost:9200/your_index
curl -XPUT localhost:9200/your_index -d '{ "mappings": {
"your_type": {
"properties": {
"billingSequence": {
"type": "integer"
}
}
}
}
}
curl -XPOST localhost:9200/your_index/your_type/1 -d '{"billingSequence": 1}'curl -XPOST localhost:9200/your_index/your_type/2 -d '{"billingSequence": 2}'
curl -XPOST localhost:9200/your_index/your_type/3 -d '{"billingSequence": 3}'
如果 更改映射,则可以script
在terms
聚合中使用a
将字符串术语转换为数字,以及terms
聚合的未记录功能,即value_type
设置,如下所示:
{ "size": 0,
"aggs": {
"count": {
"terms": {
"script": "doc.billingSequence.value as Integer", <--- transform the terms to integers
"order": {
"_term": "asc"
},
"value_type": "integer", <--- consider the terms as integer when sorting
"size": 10
}
}
}
}
以上是 需要在elasticsearch中对_term进行排序 的全部内容, 来源链接: utcz.com/qa/424220.html