代码之家  ›  专栏  ›  技术社区  ›  villasv

向映射添加属性是否需要重新索引?

  •  0
  • villasv  · 技术社区  · 6 年前

    这个 docs on _update_by_query 说:

    “按查询更新”的最简单用法是在不更改源的情况下对索引中的每个文档执行更新。 这对于获取新属性或其他联机映射更改很有用。 这是API:

    POST twitter/_update_by_query?conflicts=proceed
    

    (强调矿山)

    加上 introductory post to the Reindex API 还举例说明:

    # But now I want to search on tags using the standard analyzer so I can search for banana and find bananas
    ...
    # This doesn't take effect immediately
    ...
    # But we can _update_by_query to pick up the new mapping on all documents
    

    因此,当您向映射添加新属性时,它似乎不会自动为过去的文档编制索引。我不能百分之百肯定,因为第二个例子使用了这个词 立即 给我的印象是 最后 会。在第一个例子中,给出的具体案例是一个关闭动态映射的索引。

    因此,可以肯定的是,添加了一个新属性(或任何类型的映射更新) 总是 需要某种操作(更新或重新索引),以便以前的文档应用新映射?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Val    6 年前

    有非常 few mapping changes 您可以创建到现有映射,最常见的映射是向现有字段添加子字段。

    例如,如果您有 text 字段,您可能需要添加 keyword 子字段,以便对该字段进行排序和聚合。

    映射前:

    {
       "my_field": {
         "type": "text"
       },
       ...
    }
    

    后映射:

    {
       "my_field": {
         "type": "text",
         "fields": {
           "keyword": {
             "type": "keyword"
           }
         }
       },
       ...
    }
    

    可以对活动索引进行映射更改。新文档将同时具有 my_field my_field.keyword 字段,而旧文档将只有 米亚菲尔德 。以确保所有文档都具有 米亚菲尔德 我的\field.keyword ,只需点击 _update_by_query 将更新API和所有文档以满足新映射。

    请注意,按查询更新API在同一索引上工作,而reindex API不会更新源索引,而是将数据从源索引重新索引到目标索引。