我的索引中有以下映射:
{
"testIndex": {
"mappings": {
"type1": {
"properties": {
"text": {
"type": "string"
},
"time_views": {
"properties": {
"timestamp": {
"type": "long"
},
"views": {
"type": "integer"
}
}
}
}
}
}
}
}
" time_views"实际上是一个数组,但内部属性不是数组。
我想根据" views"的最大值对我的type1记录进行排序。每个type1记录的属性。我阅读了elasticsearch排序文档,它有针对用例的解决方案,即排序基于单个嵌套对象的字段(单个或数组)。但我想要的是不同的。我想要选择最大值" views"对于每个文档,并根据这些值对文档进行排序
我做了这个json查询
{
"size": 10,
"query": {
"range": {
"timeStamp": {
"gte": 1468852617347,
"lte": 1468939017347
}
}
},
"from": 0,
"sort": [
{
"time_views.views": {
"mode": "max",
"nested_path": "time_views",
"order": "desc"
}
}
]
}
但是我收到了这个错误
{
"error": {
"phase": "query",
"failed_shards": [
{
"node": "n4rxRCOuSBaGT5xZoa0bHQ",
"reason": {
"reason": "[nested] nested object under path [time_views] is not of nested type",
"col": 136,
"line": 1,
"index": "data",
"type": "query_parsing_exception"
},
"index": "data",
"shard": 0
}
],
"reason": "all shards failed",
"grouped": true,
"type": "search_phase_execution_exception",
"root_cause": [
{
"reason": "[nested] nested object under path [time_views] is not of nested type",
"col": 136,
"line": 1,
"index": "data",
"type": "query_parsing_exception"
}
]
},
"status": 400
}
正如我上面提到的time_views是一个数组,我想这个错误就是因为这个。 即使我不能使用基于阵列场特征的排序,因为" time_views"不是原始类型。 我认为我的最后一次机会是通过脚本编写自定义排序,但我不知道如何。 请告诉我我的错误,如果有可能实现我想要的,否则给我一个简单的脚本样本。
tnx:)
答案 0 :(得分:3)
错误消息可以解释查询的错误。实际上,问题在于映射。我认为您打算使用nested
字段,因为您使用的是嵌套查询。
您只需将time_views
字段设为nested
:
"mappings": {
"type1": {
"properties": {
"text": {
"type": "string"
},
"time_views": {
"type": "nested",
"properties": {
"timestamp": {
"type": "long"
},
"views": {
"type": "integer"
}
}
}
}
}
}