Elasticsearch - 错误的字段类型

Elasticsearch - Wrong field type

我 运行 使用 ElasticSearch 6.8。

我试图将关键字类型字段添加到我的索引映射中。 我想要的是 my_field 看起来像这样的映射:

"my_field": {
  "type": "keyword"
}

因此,为了做到这一点,我在映射中添加了一个字段:

"properties": {
  ...
  "my_field": {
    "type": "keyword",
    "norms": false
  },
  ...
}

但目前,它给了我类似的东西:

"my_field": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
  }
}

我需要这个关键字类型,因为我需要在它上面进行聚合,对于文本类型,它给了我:

Fielddata is disabled on text fields by default. Set fielddata=true on [my_field] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.

但我无法将 fielddata 设置为 true。

我尝试了很多方法,例如创建新索引而不是更新索引,但 none 这些尝试都奏效了。

此致, 朱尔斯

我刚刚在 Elasticsearch 6.X 版本上使用以下 curl 命令在 text 字段上将 field-data 设置为 true:

curl -X POST "localhost:9200/my_index/type?pretty" -H 'Content-Type: application/json' -d'
> {
>   "mappings" :{
>   "properties": {
>     "my_field": {
>       "type":     "text",
>       "fielddata": true
>     }
>   }
>   }
> }'

并且它创建了具有适当映射的索引。

{
  "_index" : "my_index",
  "_type" : "type",
  "_id" : "3Jl0F3EBg44VI1hJVGnz",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

映射 API 给出以下 JSON 响应。

{
  "my_index": {
    "mappings": {
      "type": {
        "properties": {
          "mappings": {
            "properties": {
              "properties": {
                "properties": {
                  "my_field": {
                    "properties": {
                      "fielddata": {
                        "type": "boolean"
                      },
                      "type": {
                        "type": "text",
                        "fields": {
                          "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}