Elasticsearch 脚本对嵌套字段进行排序

m14*_*416 5 elasticsearch

我在elasticsearch中有以下类型

"hotel" : {
   "magicScore" : 1
   "rooms" : [
        {
       "type" : "single",
       "magicScore" : 1
        }, 
        {
        "type" : "double",
        "magicScore" : 2
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

其中 rooms 是嵌套类型。例如,我想使用脚本排序进行排序

 "sort" : [ {
    "_script" : {
      "script" : "return doc['magicScore'].value + doc['rooms.magicScore'].value",
       "params" :  ,
      "type" : "number",
      "reverse" : true
    }
  } ]
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为房间是嵌套对象,有办法解决这个问题吗?

Swi*_*ety 3

Elasticsearch 允许基于脚本的排序嵌套对象内的排序,而且您可以将这两种方法混合在一起。你可以尝试这样的事情:

"sort" : [ {
   "_script" : {
      "nested": {
         "path": "rooms"
      },
      "script" : "return doc['magicScore'].value + doc['rooms.magicScore'].value",
      "params" :  ,
      "type" : "number",
      "reverse" : true
}}]
Run Code Online (Sandbox Code Playgroud)

一旦nested path指定,elasticsearch 将查找引用的嵌套文档的术语(如果这些文档已建立索引),因此可以通过映射引用它们doc。这将避免加载整个_source.