elasticsearch sort返回意外的null

时间:2016-03-07 02:24:48

标签: elasticsearch

我按照文档https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-fields.html名称字段添加了排序列。不幸的是,它无法正常工作

以下是步骤:

  1. 添加索引映射
  2. PUT /staff
    {
        "mappings": {
            "staff": {
                "properties": {
                    "id": {
                        "type":   "string",
                        "index":  "not_analyzed"
                    },
                    "name": { 
                        "type":     "string",
                        "fields": {
                            "raw": { 
                                "type":  "string",
                                "index": "not_analyzed"
                            }
                        }
                    }
                }
            }
        }
    }
    
    1. 添加文档
    2. POST /staff/list {
              "id": 5,
              "name": "abc" 
          }
      
      1. 搜索 name.raw
      2. POST /staff_change/_search
        {
            "sort": "name.raw"
        }
        

        但是,响应中的排序字段返回 null

        "_source": {
               "id": 5,
                "name": "abc"
            },
            "sort": [
                null
            ]
          }
        

        我不知道为什么它不起作用,我无法搜索与此相关的相关问题文档。是否有人遇到过这个问题

        非常感谢提前

1 个答案:

答案 0 :(得分:2)

您的映射不正确。您可以在索引staff内创建映射staff,然后在索引list内的映射staff下索引文档,这些文档可以使用动态映射,而不是您添加的映射。最后,您要搜索索引staff中的所有文档。试试这个:

PUT /staff
{
    "mappings": {
        "list": {
            "properties": {
                "id": {
                    "type":   "string",
                    "index":  "not_analyzed"
                },
                "name": { 
                    "type":     "string",
                    "fields": {
                        "raw": { 
                            "type":  "string",
                            "index": "not_analyzed"
                        }
                    }
                }
            }
        }
    }
}

然后索引:

POST /staff/list {
    "id": 5,
    "name": "abc aa" 
}

并查询:

POST /staff/list/_search
{
    "sort": "name.raw"
}

结果:

"hits": [
    {
        "sort": [
           "abc aa"
        ]
     }
...