我在elasticsearch中有以下类型
top
其中房间是嵌套类型。我想使用脚本排序进行排序,例如
"hotel" : {
"magicScore" : 1
"rooms" : [
{
"type" : "single",
"magicScore" : 1
},
{
"type" : "double",
"magicScore" : 2
}
]
}
这不起作用,因为房间是嵌套对象,有没有办法解决这个问题?
答案 0 :(得分:2)
doc [...]符号仅允许简单的值字段(不能返回 来自它的json对象)并且仅在非分析或单个上有意义 基于术语的领域。
您需要通过_source字段
使用它这些方面的东西:
"sort": [
{
"_script": {
"script": "m=doc['magicScore'].value;for(obj in _source.rooms){ m += obj.magicScore;};return m;",
"type": "number",
"reverse": true
}
}
]
答案 1 :(得分:0)
Elasticsearch允许Script Based Sorting和Sorting within nested objects,而且您可以将两种方法混合在一起使用。您可以尝试以下方法:
"sort" : [ {
"_script" : {
"nested": {
"path": "rooms"
},
"script" : "return doc['magicScore'].value + doc['rooms.magicScore'].value",
"params" : ,
"type" : "number",
"reverse" : true
}}]
一旦指定了nested path
,elasticsearch就会对所引用的嵌套文档的术语进行索引(如果已对其进行索引),因此可以通过doc
映射来引用它们。这将避免需要加载整个_source
。