根据数组类型字段的对象数对ElasticSearch进行排序

时间:2014-09-01 11:56:52

标签: elasticsearch

我有以下形式的弹性搜索群集:

{
    "_id":"xxxx"
    "contents":[
        {
            "name":"abc",
            "age":"24"
        }
    ]
},
{
    "_id":"yyyy"
    "contents":[
        {
            "name":"xyz",
            "age":"25"
        },
        {
            "name":"pqr",
            "age":"29"
        },
    ]

}

我必须对对象数组字段'contents'的大小执行基于排序的查询。

我试过了:

{
    "size": 10,
    "from": 0,
    "query": {
        "match_all": {} 
    },
    "sort" : {
        "_script" : {
            "script": "doc['contents.name'].values.size()",
            "order": "desc",
            "type" : "string",
        }
    }
}

上述查询有时会给我正确的结果,但大多数时候它无法按排序顺序给出结果。

1 个答案:

答案 0 :(得分:1)

您的contents字段是数组,而不是对象。因此,当您尝试访问脚本中的contents.name时,它是未定义的。你应该得到contents数组的大小:

{
  "size": 10,
  "from": 0,
  "query": {
    "match_all": {} 
  },
  "sort" : {
    "_script" : {
      "script": "doc['contents'].values.size()",
      "order": "desc",
      "type" : "string",
    }
  }
}