无法为从 logstash JDBC 输入插件创建的索引创建 elasticsearch 的映射

Not able to create elasticsearch's mappings for the index created from logstash JDBC input plugin

我正在尝试为 elasticsearch index 创建 mappings。当我使用以下查询创建索引时,我可以应用 mappings

请在 elasticsearch 中找到正在创建索引的查询

put index/profile/1
{
    "firstname" : "Karthik",
    "lastname" : "AS",
    "address" : "4/167, SouthExtn, shanmuga nagar, NA",
    "Skill" : "Java, JEE, ReactJS, ActiveMQ, ElasticSearch",
    "filename" : "My_second_file_created_at_2012.01.13.pdf"
}

对于上面创建的索引,我可以应用 mappings 并且可以成功搜索。请查看以下 mappings 详细信息

    PUT /documents_test8
{
   "settings" : {
      "analysis" : {
         "analyzer" : {
            "filename_search" : {
               "tokenizer" : "filename",
               "filter" : ["lowercase"]
            },
            "filename_index" : {
               "tokenizer" : "filename",
               "filter" : ["lowercase","edge_ngram"]
            }
         },
         "tokenizer" : {
            "filename" : {
               "pattern" : "[^\p{L}\d]+",
               "type" : "pattern"
            }
         },
         "filter" : {
            "edge_ngram" : {
               "side" : "front",
               "max_gram" : 20,
               "min_gram" : 1,
               "type" : "edgeNGram"
            }
         }
      }
   },
   "mappings" : {
      "doc" : {
         "properties" : {
            "filename" : {
               "type" : "text",
               "search_analyzer" : "filename_search",
               "index_analyzer" : "filename_index"
            }
         }
      }
   }
}

但在实际场景中,我通过 logstash JDBC 输入插件在 elasticsearch 中创建索引。我能够在 elasticsearch 中创建索引,但是问题是一旦默认情况下通过 logstash 在 elasticsearch 中创建索引 mappings 也为该索引(对于所有字段)创建。之后我无法应用我的 mappings 它显示 index [documents_test9/P07B6_6mRqmH9IP-UaCjrw] already exists 错误。如果我尝试删除该索引并执行此 mapping 我会收到 Failed to parse mapping [doc]: No handler for type [string] declared on field [filename] 错误。

不确定,如何在通过 logstash JDBC 输入插件创建索引时应用 mappings

如果我对问题的理解正确,您可以使用 index template 和通配符,这样任何包含通配符中匹配名称的新索引都将默认使用给定的索引模板。

使用以下模板,您添加的任何包含名称文档*(即 documents1documents_test8 等)的索引将默认使用给定的索引模板。

 PUT _template/documents
{
  "template": "documents*",
   "settings" : {
      "analysis" : {
         "analyzer" : {
            "filename_search" : {
               "tokenizer" : "filename",
               "filter" : ["lowercase"]
            },
            "filename_index" : {
               "tokenizer" : "filename",
               "filter" : ["lowercase","edge_ngram"]
            }
         },
         "tokenizer" : {
            "filename" : {
               "pattern" : "[^\p{L}\d]+",
               "type" : "pattern"
            }
         },
         "filter" : {
            "edge_ngram" : {
               "side" : "front",
               "max_gram" : 20,
               "min_gram" : 1,
               "type" : "edgeNGram"
            }
         }
      }
   },
   "mappings" : {
      "doc" : {
         "properties" : {
            "filename" : {
               "type" : "text",
               "search_analyzer" : "filename_search",
               "index_analyzer" : "filename_index"
            }
         }
      }
   }
}