【发布时间】: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