当前位置: 首页 > 知识库问答 >
问题:

为什么在Elasticsearch中字段是由类型而不是索引指定的?

魏鸿
2023-03-14

如果Elasticsearch索引中的多个类型具有相同名称的字段,则这些字段必须具有相同的映射,该映射将尝试创建“foobar”属性作为字符串和长“。。。

例如,如果您尝试放置以下索引映射:

{
  "mappings": {
    "type_one": {
      "properties": {
        "foobar": { 
          "type": "string"
        }
      }
    },
    "type_two": {
      "properties": {
        "foobar": { 
          "type": "long"
        }
      }
    }
  }
}

...将返回以下错误

{
  "error": {
    "root_cause": [
      {
        "type": "mapper_parsing_exception",
        "reason": "Failed to parse mapping [type_one]: mapper [foobar] cannot be changed from type [long] to [string]"
      }
    ],
    "type": "mapper_parsing_exception",
    "reason": "Failed to parse mapping [type_one]: mapper [foobar] cannot be changed from type [long] to [string]",
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "mapper [foobar] cannot be changed from type [long] to [string]"
    }
  },
  "status": 400
}

以下内容来自elasticsearch网站:

不同类型字段之间的冲突

在两种不同类型中具有相同名称的同一索引中的字段必须具有相同的映射,因为它们在内部由相同的字段支持。尝试更新存在于多个类型中的字段的映射参数将引发异常,除非您指定update\u all\u types参数,在这种情况下,它将跨同一索引中具有相同名称的所有字段更新该参数。

如果具有相同名称的字段对于索引中的所有类型都必须具有相同的映射,那么为什么要为每个类型指定字段映射?为什么不为整个索引指定字段,然后确定为每种类型分配了哪些字段。

例如:

{
   "fields":{
      "PropA":{
         "type":"string"
      },
      "PropB":{
         "type":"long"
      },
      "PropC":{
         "type":"boolean"
      }
   },
   "types":{
      "foo":[
         "PropA",
         "PropB"
      ],
      "foo":[
         "PropA",
         "PropC"
      ],
      "foo":[
         "PropA",
         "PropC",
         "PropC"
      ]
   }
}

像这样的映射格式不是更简洁,更好地表示实际允许的内容吗?

我这么问的原因是因为我正在创建一个索引模板JSON文件,其中包含15种类型中使用的大约80个不同的字段。许多字段用于多种甚至所有类型。所以每当我需要更新一个字段时,我必须确保我为使用它的每种类型更新它。

共有1个答案

江飞白
2023-03-14

看来我不是唯一一个感到困惑的人。

删除对类型的支持#15613

听起来,删除对每个索引的多个类型的支持并在索引级别指定字段是未来版本的路线图。

 类似资料:
  • 问题内容: Elasticsearch中的索引是什么?一个应用程序有多个索引还是只有一个索引?假设您为某些汽车制造商构建了一个系统。它涉及人员,汽车,零件等。您是否有一个名为制造商的索引,或者您有一个人的索引,一个用于汽车的索引和一个用于零备件的索引?有人可以解释吗? 问题答案: 很好的问题,答案比人们期望的要细腻得多。您可以将索引用于几种不同的目的。 关系指标 最简单,最熟悉的布局将克隆您从关系

  • 问题内容: 我有一个文档,其中包含许多我从未查询过的字段,因此我想关闭这些字段的索引以节省资源。我相信我需要禁用该字段,但是如何指定要对哪些字段建立索引呢? 问题答案: 默认情况下,所有字段也都在_all特殊字段内建立索引,该字段开箱即用地提供了所谓的catchall功能。但是,可以通过以下选项为映射中的每个字段指定是否要将其添加到_all字段: 上面的示例禁用了name字段的默认行为,该行为不会

  • 在Solr围绕原子更新的文档中,他们提到一个字段应该是非索引和非存储的。 https://lucene.apache.org/solr/guide/7_6/updating-parts-of-documents.html#in-place-update-example 只有当要更新的字段满足以下三个条件时,才使用该方法执行原子更新操作: 是非索引(indexed=“false”)、非存储(stor

  • 本文向大家介绍ElasticSearch中的集群、节点、索引、文档、类型是什么?相关面试题,主要包含被问及ElasticSearch中的集群、节点、索引、文档、类型是什么?时的应答技巧和注意事项,需要的朋友参考一下 群集是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能。群集由唯一名称标识,默认情况下为“elasticsearch”。此名称很重要,因为

  • 本文向大家介绍Elasticsearch的倒排索引是什么?相关面试题,主要包含被问及Elasticsearch的倒排索引是什么?时的应答技巧和注意事项,需要的朋友参考一下 面试官:想了解你对基础概念的认知。 解答:通俗解释一下就可以。 倒排索引是搜索引擎的核心。搜索引擎的主要目标是在查找发生搜索条件的文档时提供快速搜索。倒排索引是一种像数据结构一样的散列图,可将用户从单词导向文档或网页。它是搜索引

  • 本文向大家介绍什么是索引?SQL Server 2000里有什么类型的索引?相关面试题,主要包含被问及什么是索引?SQL Server 2000里有什么类型的索引?时的应答技巧和注意事项,需要的朋友参考一下 任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据