【问题标题】:Not able to create elasticsearch's mappings for the index created from logstash JDBC input plugin无法为从 logstash JDBC 输入插件创建的索引创建弹性搜索的映射
【发布时间】:2018-06-11 13:54:31
【问题描述】:

我正在尝试为 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

【问题讨论】:

  • 您正在尝试在 5.x 或 6.x ES 服务器上创建 2.x 映射。在您的映射中,string 必须替换为 text
  • 我已经更新了我的实际mappings,我将String 更改为text,这也给出了相同的错误消息
  • 您需要删除索引,使用适当的映射重新创建它并重新填充数据
  • 我已更新我的问题并在我的问题中显示filename。如果我试图搜索file,它应该将文档作为结果,我在上面写了mappings
  • 就是这样。我必须先执行 logstash,然后从 logstash 调用映射或它将如何?

标签: java elasticsearch logstash kibana elastic-stack


【解决方案1】:

如果我正确理解了这个问题,您可以使用带有通配符的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"
            }
         }
      }
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多