不同类型的弹性搜索错误映射器[email.keyword],current_type [text],merged_type [keyword]

时间:2019-06-26 14:12:17

标签: elasticsearch

我正在使用新创建的索引在PHP中进行upsert,因此不存在任何数据。我遇到了一个例外,我希望看到是否已经有数据但索引是新创建的。我还需要对新创建的索引进行增补吗?在添加自定义分析器之前,upsert可以正常工作。

{
 "error":{
  "root_cause":[
     {
        "type":"remote_transport_exception",
        "reason":"[8902bb997443][127.0.0.1:9300][indices:data/write/update[s]]"
     }
  ],
    "type":"illegal_argument_exception",
    "reason":"mapper [email.keyword] of different type, current_type [text], merged_type [keyword]"
  },
  "status":400
}

下面列出的是我为索引创建的代码

   {
       "index":"myindex",
       "body":{
          "settings":{

             "analysis":{
                "analyzer":{
                   "my_email_analyzer":{
                      "type":"custom",
                      "tokenizer":"uax_url_email",
                      "filter":[
                         "lowercase",
                         "stop"
                      ]
                   }
                }
             }

          },
          "mappings":{
             "properties":{
                "ak_additional_recovery_email":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "ak_city_town":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "ak_first_name":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "ak_last_name":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "ak_second_additional_recovery_email":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "ak_state":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "email":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"text",
                         "analyzer":"my_email_analyzer"
                      }
                   }
                },
                "indexedHash":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "uID":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "uName":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"text",
                         "analyzer":"my_email_analyzer"
                      }
                   }
                }
             }
          }
       }
    }

这是试图做upsert的PHP代码

    $this->client->update([
        'id'    => $data['uID'],
        'body'  => [
            'doc'    => $data,
            'upsert' => [
                'uName'                               => $data['uName'],
                'email'                               => $data['email'],
                'ak_first_name'                       => $data['ak_first_name'],
                'ak_last_name'                        => $data['ak_last_name'],
                'ak_city_town'                        => $data['ak_city_town'],
                'ak_state'                            => $data['ak_state']
            ]
        ],
        'index' => $this->dbName,
        'type'  => 'general'
    ]);

1 个答案:

答案 0 :(得分:0)

简单的错误!我为索引类型使用了错误的类型。我不确定为什么会发布此错误。