当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch动态映射是否重新索引文档?

施默
2023-03-14

问题所在

我是elasticsearch的新手,我想了解动态映射和重新索引文档之间的关系。

根据我的实验,当动态映射打开时,文档的重新索引是自动完成的。这意味着如果向文档中添加新字段,它将自动被索引。

TEST1-带映射的索引

# 1.1 create index with mapping dynamic

    PUT /product_dyn_on
        {
            "mappings" : {
                "dynamic": true,
                "properties": {
                    "price": { "type": "integer" }
                }
            }
        }


# 1.2 create a document

        POST /product_dyn_on/_doc/1
        { "price": 100 } 


# 1.3 create a document with a field that was not mapped at the beginning

        POST /product_dyn_on/_doc/2
        { "price": 100, "discount" : 20}


# 1.4 browse document to see if it has was mapped
      GET /product_dyn_on/_search

        GET /product_dyn_on/_search
        { 
          "query": {"term" : {"discount" : 20}}

        }


        GET /product_dyn_on/_search
        { 
          "query": {"match" : {"price" : 100}}

        }


# 1.5 - update first object


    PUT /product_dyn_on/_doc/1
    {
      "price" : 200,
  "discount" : 20
    }

# 1.6 - check results (both objects are returned)


        GET /product_dyn_on/_search
        { 
          "query": {"match" : {"discount" : 20}}

        }

TEST2-没有映射的索引

# 2.1 create index with mapping dynamic

        PUT /product_dyn_off
            {
                "mappings" : {
                    "dynamic": false,
                    "properties": {
                        "price": { "type": "integer" },
                        "is_active": {"type": "boolean" },
                        "price": { "type": "integer"},
                        "sold": { "type": "long"}
                    }
                }
            }


    # 2.2 create a document

            POST /product_dyn_off/_doc/1
            { "price": 100 } 


    # 2.3 create a document with a field that was not mapped at the beginning

            POST /product_dyn_off/_doc/2
            { "price": 100, "discount" : 20}


    # 2.4 browse document to see if it has was mapped
          GET /product_dyn_off/_search

            GET /product_dyn_off/_search
            { 
              "query": {"term" : {"discount" : 20}}

            }


            GET /product_dyn_off/_search
            { 
              "query": {"match" : {"price" : 100}}

            }


    # 2.5 - Update first object


        PUT /product_dyn_off/_doc/1
        {
          "price" : 200,
      "discount" : 20
        }

    # 2.6 - Check results

            GET /product_dyn_off/_search

            GET /product_dyn_off/_search
            { 
              "query": {"match" : {"discount" : 20}}

            }

            GET /product_dyn_off/_search
            { 
              "query": {"match" : {"price" : 200}}

            }


    # Clean Everything

        DELETE /product_dyn_on
        DELETE /product_dyn_off

共有1个答案

孟谭三
2023-03-14

默认情况下,如果发现任何新字段(null,boolean(true/false),float,integer,object,array,string(date,long,double,text field,with keyword子字段)),那么elasticsearch将索引文档,我们可以使用动态映射和模板https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-mapping.html进行定制

我们可以使用此关键字限制索引动态字段。true(默认值)、false(未索引但已存储)和strict(抛出并被拒绝的异常)html" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html

 类似资料:
  • 问题内容: 也许我缺少一些简单的东西,但仍然无法弄清楚以下内容: 从ES 6.x开始,该字段已弃用,建议使用说明(https://www.elastic.co/guide/en/elasticsearch/reference/current/copy- to.html )。 但是,给我的印象是,您需要显式指定要复制到自定义字段的字段。但是,如果我使用动态映射,则我不事先知道字段,因此不能使用? 我

  • 我正在尝试仅对特定索引禁用动态映射创建,而不是对所有索引禁用。出于某种原因,我无法将默认映射设置为“dynamic”:“false”。所以,这里有两个选项,我可以看到: 指定属性的索引。制图员。“动态”文件弹性搜索。yml 第一个选项只能接受值:true、false和strict。因此,无法指定特定索引的子集(就像我们使用属性“action.auto_create_index”按模式所做的那样)h

  • 我想为我的索引更新elasticsearch中的默认映射。但是所有的文档都指出我们必须为更新映射提供类型。问题是我有很多索引类型,它们是动态创建的,就像新类型的文档出现时一样。所以最好的处理方法是默认映射类型。因为我不必为每个类型定义映射。但现在我无法更新我的索引默认映射。如果可能的话,请告诉我?

  • 我对弹性搜索一无所知。所以,如果这是一个愚蠢的问题,请原谅我,我的问题可能已经在其他地方得到了回答,但我找不到。我想使用弹性搜索作为我的网络中PDF和docx的搜索引擎。我使用fscrawler将PDF文件吸收到弹性搜索中。因为我要摄取的文档是几种语言的,所以我想使用n-graming进行词干分析。为此,我想像这样更新我的映射 现在我收到了这个错误信息 {“error”:{“root_cause”

  • 我目前正在使用ElasticSearch(PHP客户端)构建一个电子商务系统搜索,但遇到了一个问题 我存储的数据是简单文本(如产品名称)和列表(如颜色、大小)的混合体 我遇到的问题是当产品没有任何颜色时 我有以下字段 所以当我发送一个产品时,它看起来是这样的 这就像预期的一样,但是当我尝试发送这样的东西时 它抛出了一个错误: {“error”:{“root_cause”:[{“type”:“map

  • 问题内容: 我正在努力完成索引创建这一简单任务,目标是使用分析器和字段映射创建索引。当我使用分析器创建索引时,我可以通过分析api调用与分析器通信,但是当我添加映射信息时,创建索引调用失败,并显示“字段[$ field]]找不到Analyzer [analyzer1]”,我创建了一个脚本来显示问题: 问题答案: 我相信您的问题是这些设置需要嵌套在JSON的一个节点内,而不是您所拥有的嵌套在一个节点