【问题标题】:ElasticSearch 7 & Kibana unexpected behaviorElasticSearch 7 和 Kibana 意外行为
【发布时间】:2021-09-14 04:52:24
【问题描述】:

我正在尝试将数据存储到弹性搜索索引中,列的数据如下所示

C ID 

1234
5678
NA
123D D5614 A7890 

现在我知道这些数据有点混杂,所以我选择了带有以下属性的文本字段

"mappings": {
    "properties":{
         "C ID":{"type":"text" , "fields" :{'keyword': {'type':'keyword'}}},
         
     }
}

即使在此之后,我总是会收到错误消息。 无法解析文档 ID 4 中 long 类型的字段 [C ID]

请帮我解决这个问题。我没有给出任何关于 long 不知道为什么会出现此错误的参考

更新

我的代码库

from elasticsearch import Elasticsearrch 

ESConnector 是一个负责 kerberos 登录的类。我们在 ESConnector 类下调用 Elasticsearch

es = ESConnector()

if not  ex.indices.exist(INDEX):
     set = {"settings":{"index":{"number_of_shards":1, "number_of_replicas":1}} 

     es.indices.create(INDEX, body = set)


mbody =   {
  "mappings": {
        "properties":{
             "C ID":{"type":"text" , "fields" :{'keyword': {'type':'keyword'}}},
             
         }
    }
}

es.indices.put_mapping(INDEX, body = mbody)

【问题讨论】:

  • 您能否分享您的索引的真实映射,因为它可能不是您认为的那样? GET index/_mapping
  • 令人惊讶的 index/_mapping 返回 C_ID 类型 as long 。我使用 es.indices.delete(INDEX) 删除了索引,并删除了 kibana 中的模式。当我再次重试时,我得到了同样的错误。
  • 问题是第一个“C ID”值是一个数字,所以ES检测为long。您的映射似乎没有正确安装。您是如何创建索引和映射的?
  • 是的,首先在python中创建INDEX然后put_mapping
  • 你能显示你的代码吗?显然有些事情没有像你期望的那样工作

标签: python elasticsearch kibana


【解决方案1】:

您可以在一次调用中使用映射创建索引

if not es.indices.exist(INDEX):
    body = {
      "settings": {
        "index": {
          "number_of_shards": 1,
          "number_of_replicas": 1
        }
      },
      "mappings": {
        "properties": {
          "C ID": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword"
              }
            }
          }
        }
      }
    }

    es.indices.create(INDEX, body = body)

它应该这样工作。

【讨论】:

    猜你喜欢
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多