Elasticsearch父子关系从2.4更改为6.2

时间:2018-03-27 04:40:35

标签: elasticsearch elasticsearch-plugin elasticsearch-5

我之前为父子文档编制索引的实现如下所示。

索引1:

{
  "XX": {
    "date_detection": true,
    "_parent": {
      "type": "versiontest"
    },
    "properties": {
      "curatedBy": {
        "type": "keyword",
        "index": "true"
      }
    }
  }
}

索引2:

{
  "YY": {
    "date_detection": false,
    "properties": {
      "versionnumber": {
        "type": "keyword"
      },
      "versiondate": {
        "type": "date",
        "format": "yyyy/MM/dd HH:mm:ss"
      }
    }
  }
}

现在我根据ES 6.2文档修改了子索引并进行了以下更改。

{
  "XX": {
    "date_detection": true,
    "properties": {
      "my_join_field": {
        "type": "join",
        "relations": {
          "YY": "XX"
        }
      },
      "curatedBy": {
        "type": "keyword",
        "index": "true"
      }
    }
  }
}

但是当我尝试创建父索引和子索引并推送文档时,我看到以下错误。

java.lang.IllegalArgumentException:拒绝将映射更新为[XXtest],因为最终映射将具有多于1种类型:[XX,YY]

有人可以在这里建议不正确的内容吗?

1 个答案:

答案 0 :(得分:0)

我对顶级'XX'感到有些困惑 - 这种类型与关系没有任何关系。您现在应该使用类型_doc,这将使7.0中的迁移更容易(API中的类型将是可选的)。

IMO你的映射应该是这样的:

PUT my-index
{
  "mappings": {
    "_doc" : {
      "properties": {
        "my_join_field": {
          "type": "join",
          "relations": {
            "my-parent": "my-child"
          }
        },
        "curatedBy": {
          ...
        }
      }
    }
  }
}

然后你可以索引数据:

PUT my-index/_doc/parent1
{
  "curatedBy" : "...",
  "my_join_field": {
    "name": "my-parent"
  }
}
PUT my-index/_doc/child1?routing=parent1
{
  "curatedBy" : "...",
  "my_join_field": {
    "name": "my-child",
    "parent": "parent1"
  }
}