ElasticSearch无法按顺序对嵌套对象进行排序

时间:2018-12-09 01:01:47

标签: elasticsearch

ElasticSearch 6.5.2给定映射和查询,将'desc'更改为'asc'并反之亦然不会影响文档顺序。没有看到任何错误,结果中只有sort: [Infinity]

映射:

{
  "mappings": {
    "_doc": {
      "properties": {
        "tags": {
          "type": "keyword"
        },
        "metrics": {
          "type": "nested",
          "dynamic": true
        }
      }
    }
  }
}

查询

{
  "query": {
    "match_all": {
    }
  },
  "sort": [
    {
      "metrics.http.test.value": {
        "order": "desc"
      }
    }
  ]
}

文档结构:

{
  "tags": ["My Tag"],
  "metrics": {
    "http.test": {
      "updated_at": "2018-12-08T23:22:07.056Z",
      "value": 0.034
    }
  }
}

2 个答案:

答案 0 :(得分:1)

按嵌套字段排序时,有必要使用nested参数来说明嵌套字段的路径。 查询中缺少的一件事是要排序的字段。假设您要对updated_at进行排序,查询将为:

{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "metrics.http.test.updated_at": {
        "order": "desc",
        "nested": {
          "path": "metrics"
        }
      }
    }
  ]
}

在使用嵌套字段进行排序时,您还应该记住的另一件事是排序中的filter子句。进一步了解here

答案 1 :(得分:0)

显然将映射更改为此:

"metrics": {
  "dynamic": true,
  "properties": {}
}

修复它,并允许以正确的顺序进行排序。