【问题标题】:Elasticsearch basic mapping failsElasticsearch 基本映射失败
【发布时间】:2017-08-23 00:15:01
【问题描述】:

我已经为 Elasticsearch 5.5.2 和 Kibana 安装了 Docker 容器。我开始学习映射类型,通过xcurl用如下代码创建了一个索引:

{
  "mappings": {
    "user": { 
      "_all":       { "enabled": false  }, 
      "properties": { 
        "title":    { "type": "text"  }, 
        "name":     { "type": "text"  }, 
        "age":      { "type": "integer" }  
      }
    }
}

索引创建成功,我决定插入一些数据。当我尝试将字符串添加到整数字段 i.e. {"age": "hello"} 时,Elastic 显示错误(这意味着映射工作正常)。问题出在其他数据类型上:

1.它在字符串字段中接受整数和浮点数(我认为这可能是因为隐式转换)。

2.它在agefield 中接受像22.4 这样的浮点数(当我使用 Kibana 或 xcurl 搜索时,agefield 的内容显示为浮点数而不是整数,这意味着没有从浮点数进行强制转换为整数)

我做错了什么?

【问题讨论】:

  • 您能描述一下您是如何插入文档的吗?
  • 对于您问题的第一部分; 22.2 是一个完全有效的字符串。字符串不是普通的字母,它可以是任何东西。不同之处在于 text 字段的分析和标记与其他字段不同。
  • @aclokay curl -XPOST localhost:9200/my_index/user -d '{"title":"A title", "name":"username","age":223.5}' 并返回 { "_index" : "my_index", "_type" : "user", "_id" : "AV4JO3pZh8gyIWsivJ6d", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "created" : true }
  • @MatsLindh 即使我没有用双引号指定它​​?我正在插入 22.2 而不是 "22.2" 并且它接受该值。

标签: elasticsearch kibana


【解决方案1】:

您是否尝试过禁用强制?可以在现场级别完成:

   {
     "mappings": {
       "user": { 
         "_all":       { "enabled": false  }, 
         "properties": { 
           "title":    { "type": "text"  }, 
           "name":     { "type": "text"  }, 
           "age":      { "type": "integer",
                         "coerce": false}  
         }
       }
   }

或在所有字段的索引级别:

   "settings": {
       "index.mapping.coerce": false
     },
     "mappings": {
   ...

【讨论】:

  • 运行正常。谢谢@Imma :)
猜你喜欢
  • 2020-07-30
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多