【问题标题】:Dealing with a change to the type of an existing field?处理现有字段类型的更改?
【发布时间】:2014-02-05 14:58:53
【问题描述】:

如果我有一个在 ES 中索引的简单对象

{ "name" : "Mark", "age" : 30}

然后另一个对象被添加到同一个索引中

{ "name" : "Bill", "age" : "forty"}

映射将无法更新,新对象不会被索引。根据弹性搜索文档

"一旦添加了一个字段,它的类型就不能改变了。比如我们添加了age,它的值是一个数字,那么它就不能被当作一个字符串来处理。"

有什么办法可以让这些相似的people 对象在同一个索引下存在(并且可以搜索)?

【问题讨论】:

    标签: indexing elasticsearch lucene


    【解决方案1】:

    恐怕你做不到。因为一旦声明了字段的类型,就无法在不重新索引整个数据集的情况下更改它。 (当然,重构你的代码)。

    Apache Solr 也是如此。

    一个选项可能是引入一个新字段 (age_in_string) 并用您想要的值填充它:“30”和“四十”。你可以搜索一下。

    【讨论】:

    • 我只是使用age 字段来表达我的想法。我实际上想到的是允许更改任意数量的字段,根据您的解释,这显然是不可能的。如果我要走另一条路并重新索引所有数据,那么以前索引的文档(其中age 是一个数字)将被忽略,而支持以age 作为字符串的新文档,我的想法是对的吗?
    猜你喜欢
    • 2017-08-04
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多