如何在elasticsearch中对字符串进行排序

How to sort string in elasticsearch

我想获得按名称(字符串)排序的结果,这就是我所做的:

1.create 索引命名为元数据 放 http://IP:9200/元数据/ 2.创建类型名称作为对象 POST http://ip:9200/metadata/objects

{
"mappings":{
    "objects":{
        "properties":{
            "name":{
                "type":"string",
                "index": "not_analyzed"
            },
            "version":{
                "type":"integer"
            },
            "size":{
                "type":"integer"
            },
            "hash":{
                "type":"string"
            }
        }   
    }
}

}

  1. 插入数据

POST http://ip:9200/metadata/objects/test3_1?op_type=create

{
  "name":"test3",
  "version":1,
   "size":13,
   "hash":"2oUvHeq7jQ27Va2y/usI1kSX4cETY9LuevZU9RT+Fuc="
}
  1. 获取按名称排序的结果

获取http://101.43.155.248:9200/metadata//_search?sort=name,version

错误是

文本字段未针对需要每个文档字段数据的操作(如聚合和排序)进行优化,因此默认情况下禁用这些操作。请改用关键字字段。或者,在 [name] 上设置 fielddata=true 以通过反转倒排索引来加载字段数据。请注意,这可能会占用大量内存

您需要为排序字段使用 .keyword(如果它是动态创建的),或者将其他字段定义为需要排序的 .keyword

当您手动创建索引映射时,您需要在 name 字段上手动添加 .keyword,在 price 上没有问题,因为它在数字字段上有效。