需要在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}'

如果 更改映射,则可以scriptterms聚合中使用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

回到顶部