【问题标题】:Elastic Search: Alternative of flattened datatype in Elastic Search 7.1Elasticsearch:Elasticsearch 7.1 中扁平数据类型的替代方案
【发布时间】:2020-07-04 04:37:32
【问题描述】:

我有两个 Elastic Search 版本,一个是 7.3,第二个是 7.1。我正在为 Elastic Search 7.3 使用 flattened 数据类型,并且我还想在 Elastic Search 7.1 中使用此数据类型。这样我就可以像存储在 Elastic Search 7.3 中一样存储我的数据。
我研究了 flattened 数据类型并知道它支持 7.x 但是当我在 7.1 中尝试时它给了我 mapper_parsing_exception 错误。
我尝试的如下所示。

  • Elastic Search 7.3

    索引创建

    PUT demo-flattened
    
    回应:
       {
        "acknowledged": true,
        "shards_acknowledged": true,
        "index": "demo-flattened"
       }
    

    插入映射

        PUT demo-flattened/_mapping
        {
            "properties": {
                "host": {
                    "type": "flattened"
                }
            }
        }
    
    回应:
        {
            "acknowledged": true
        }
    
  • Elastic Search 7.1
     PUT demo-flattened
    
    回应:
       {
        "acknowledged": true,
        "shards_acknowledged": true,
        "index": "demo-flattened"
       }
    

    插入映射

        PUT demo-flattened/_mapping
        {
            "properties": {
                "host": {
                    "type": "flattened"
                }
            }
        }
    
    回应:
       {
           "error": {
               "root_cause": [
                   {
                       "type": "mapper_parsing_exception",
                       "reason": "No handler for type [flattened] declared on field [host]"
                   }
               ],
               "type": "mapper_parsing_exception",
               "reason": "No handler for type [flattened] declared on field [host]"
           },
           "status": 400
       }
    

我想在 Elastic Search 7.1 中使用 flattened 数据类型。在 7.1 版本中是否可以使用 flattened 数据类型,因为 Elastic Search 7.3 支持 flattened 数据类型。

任何帮助或建议将不胜感激。

【问题讨论】:

    标签: elasticsearch elasticsearch-7


    【解决方案1】:

    首先,扁平化在 7.1 中提供 X-pack(X-pack 是付费功能), 所以我认为你可以使用带有启用标志的对象类型为假 这将帮助您在没有任何索引的情况下按原样存储该字段。

    {
            "properties": {
                "host": {
                    "type": "object",
                    "enabled": false
                }
            }
        }
    

    【讨论】:

    • 感谢您的回答。我读到了object 类型和enabled 映射属性以及flattened 字段类型。我认为这无关紧要,因为两种方式的目的不同。尽管如此,我会尝试你的解决方案。
    【解决方案2】:

    检查您的 ElasticSearch 的版本。如果它是 OSS 版本,那么它不适合你。

    您可以通过在 Kibana 中运行 GET \ 来检查它。你会得到类似的东西:

    {
      "version" : {
        "number" : "7.10.2",
        "build_flavor" : "oss",
      }
    }
    

    但对于支持 flattened 类型的 ElasticSearch,你会得到类似的结果:

      "version" : {
        "number" : "7.10.2",
        "build_flavor" : "default",
       }
    }
    

    您可以在 Kibana Github 官方页面No handler for type [flattened] declared on field [state] #52324找到更多详细信息。

    【讨论】:

      【解决方案3】:

      实际上,它是这样工作的

      值索引方式的相似之处,扁平字段与关键字字段共享大部分相同的映射和搜索功能

      在这里,您只有一个名为host 的字段。您可以将其替换为 keyword

      有什么相似之处:

      映射:

      "labels": {
              "type": "flattened"
            }
      

      数据:

      "labels": {
          "priority": "urgent",
          "release": ["v1.2.5", "v1.3.0"],
          "timestamp": {
            "created": 1541458026,
            "closed": 1541457010
          }
        }
      

      在索引期间,会为 JSON 对象中的每个叶值创建标记。这些值被索引为字符串关键字,无需对数字或日期进行分析或特殊处理

      要查询它们,您可以使用"term": {"labels": "urgent"}"term": {"labels.release": "v1.3.0"}

      当它是关键字时,您可以将它们作为单独的字段。

      {
       "host":{
         "type":"keyword"
       }
      }
      

      Reference

      【讨论】:

      • 感谢您的回答@Gibbs,很抱歉我已经提交了一个文档,您可以查看文档 flattened 数据类型从 7.3 开始可用,我需要在 7.1 中,我的数据是太大,即来自病毒总数的域报告,所以我想在 7.1 中替代 flattened 数据类型,以便我可以像在 7.3 中一样在 7.1 中将相同的数据存储为单个对象
      • 很遗憾,除非您覆盖开源代码。
      猜你喜欢
      • 1970-01-01
      • 2012-08-21
      • 2011-03-18
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      相关资源
      最近更新 更多