elasticsearch,mapping,Dynamic,elasticsearch,Mapping" /> elasticsearch,mapping,Dynamic,elasticsearch,Mapping" />

Dynamic 弹性搜索何时添加动态映射

Dynamic 弹性搜索何时添加动态映射,dynamic,elasticsearch,mapping,Dynamic,elasticsearch,Mapping,我在弹性搜索(ES)动态映射方面遇到了麻烦。看来我陷入了困境 主要目标是将进入ES的所有内容存储为字符串 我所尝试的: 在ES中,只有在创建索引后才能创建动态映射 创建。好的,有道理 我无法创建空索引,因此如果 发送到索引中的第一项不是字符串,我不能 重新分配它。。。我不知道第一个是什么类型的对象 在索引中,它可以是任何类型,这取决于应用程序如何接受各种对象/事件 因此,如果我不能提前创建映射,不能插入空索引来创建映射,也不能在事后更改映射,那么如果第一项不是字符串,我该如何处理呢 下面是我目前

我在弹性搜索(ES)动态映射方面遇到了麻烦。看来我陷入了困境

主要目标是将进入ES的所有内容存储为字符串

我所尝试的:

  • 在ES中,只有在创建索引后才能创建动态映射 创建。好的,有道理

  • 我无法创建空索引,因此如果 发送到索引中的第一项不是字符串,我不能 重新分配它。。。我不知道第一个是什么类型的对象 在索引中,它可以是任何类型,这取决于应用程序如何接受各种对象/事件

  • 因此,如果我不能提前创建映射,不能插入空索引来创建映射,也不能在事后更改映射,那么如果第一项不是字符串,我该如何处理呢

    下面是我目前正在做的事情(使用Javascript客户端)

    去营救!!这正是您所需要的,其想法是创建索引模板,一旦您希望在该索引中存储文档,ES将使用您提供的映射(即使是动态映射)为您创建它

    然后,当您在索引中索引名称与
    index\u name.*
    匹配的任何内容时,将使用上面的动态映射创建索引

    例如:

    curl -XPUT localhost:9200/index_name_1/type_name/1 -d '{
      "one": 1,
      "two": "two", 
      "three": true
    }'
    
    这将创建一个名为
    index\u name\u 1
    的新索引,其映射类型为
    type\u name
    ,其中所有属性都是
    string
    。你可以用

    curl -XGET localhost:9200/index_name_1/_mapping/type_name
    
    答复:

    {
      "index_name_1" : {
        "mappings" : {
          "type_name" : {
            "dynamic_templates" : [ {
              "strings" : {
                "mapping" : {
                  "type" : "string"
                },
                "match" : "*",
                "match_mapping_type" : "*"
              }
            } ],
            "properties" : {
              "one" : {
                "type" : "string"
              },
              "three" : {
                "type" : "string"
              },
              "two" : {
                "type" : "string"
              }
            }
          }
        }
      }
    }
    

    请注意,如果您愿意通过Javascript API执行此操作,则可以使用该调用。

    您可以共享当前正在使用的映射吗?没有映射,这就是我正在尝试的。创建我自己的自定义一个,其中所有内容都是字符串。我的问题是什么时候创建动态映射,因为我在创建动态映射之后才能创建,而且您也无法根据我所读的内容更改ES中的现有映射,因此您必须重新编制索引。感谢@Val,我正在使用JS API,但我不知道在使用.create()创建索引时如何应用模板。文档中没有提到如何应用模板参数。。。你看到我回答的最后一句话了吗不知道我错过了什么。。。我更新了帖子以显示我的代码。有什么建议吗?我被卡住了:/I我可以看到该模板使用curl\u模板存在,但无论出于何种原因,它都不会将该模板应用于我的记录。也没有错误。哦,我知道。。。您不应该显式创建索引,只需尝试在
    timeline-2015-11-21
    索引中为文档编制索引,ES将为您创建索引。因此,您应该使用调用而不是
    索引。创建一个
    索引似乎也不起作用。在ES中,我仍然使用以下curl得到type:long表示“number\u try”:curl-k——request POST——header‘Content type:application/json’——data’{“number\u try”:123,“description”:“your description goes here”,“text”:“your text goes here.可以代替description属性”,“severity\u type”:“error”}“myuri”
    
    curl -XGET localhost:9200/index_name_1/_mapping/type_name
    
    {
      "index_name_1" : {
        "mappings" : {
          "type_name" : {
            "dynamic_templates" : [ {
              "strings" : {
                "mapping" : {
                  "type" : "string"
                },
                "match" : "*",
                "match_mapping_type" : "*"
              }
            } ],
            "properties" : {
              "one" : {
                "type" : "string"
              },
              "three" : {
                "type" : "string"
              },
              "two" : {
                "type" : "string"
              }
            }
          }
        }
      }
    }