【发布时间】:2014-06-12 08:09:57
【问题描述】:
我们目前正在使用 Couchbase 插件 (transport-couchbase) 将数据传输并索引到 ElasticSearch (http://docs.couchbase.com/couchbase-elastic-search/)
我在这里查看了 ElasticSearch 的映射文档: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html
我的理解是,如果您依赖 ElasticSearch 的默认设置,一旦文档被索引,ElasticSearch 将为该文档类型创建动态映射。这是我们默认的。
我们遇到了在添加特定文档类型之后,以及当传输插件插入“无效”文档(文档的字段类型现在不同——从字符串 -> 数组)时, ElasticSearch 抛出一个异常并从本质上中断了从 Couchbase 到 ElasticSearch 的复制。异常如下所示:
Caused by: org.elasticsearch.ElasticsearchIllegalArgumentException: unknown property
[xyz]
java.lang.RuntimeException: indexing error MapperParsingException[failed to parse
[doc.myfield]]; nested: ElasticsearchIllegalArgumentException[unknown property[xyz]]
有没有一种方法可以配置 ElasticSearch,以便简单地过滤“无效”文档而不会引发异常并破坏复制?
谢谢。
【问题讨论】:
-
你不能定义你想要的文档的映射吗,在你的
elasticsearch.yml文件中设置index.mapper.dynamic: false,理论上(未经测试的)elasticsearch(在我看来)应该拒绝无效的文件。只是一个想法。 -
@NathanSmith 映射太弱,无法正确检查文档。基本上它只允许字段名称和原始类型。没有词汇、范围、查找等。也许如果可以定义自定义类型,它会起作用。