Java &引用;MapperParsingException[Analyzer[second]未为字段[Name]]找到;
我已使用以下设置在Elasticsearch中创建了索引:Java &引用;MapperParsingException[Analyzer[second]未为字段[Name]]找到;,java,
elasticsearch,elasticsearch-jest,Java,
elasticsearch,Elasticsearch Jest,我已使用以下设置在Elasticsearch中创建了索引: { "my_index" : { "aliases" : { }, "mappings" : { }, "settings" : { "index" : { "creation_date" : "1461229073677", "uuid" : "7-TECarfRs6XO8yZE7SeWA", "number_of_replicas" : "1",
{
"my_index" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"creation_date" : "1461229073677",
"uuid" : "7-TECarfRs6XO8yZE7SeWA",
"number_of_replicas" : "1",
"number_of_shards" : "5",
"version" : {
"created" : "1040599"
},
"settings" : {
"analysis" : {
"analyzer" : {
"second" : {
"type" : "custom",
"filter" : [ "lowercase", "synonym" ],
"tokenizer" : "standard"
}
},
"filter" : {
"synonym" : {
"type" : "synonym",
"synonyms" : [ "i pad => ipad", "smart phone => smartphone" ]
}
}
}
}
}
},
"warmers" : { }
}
}
现在,我尝试使用以下代码设置映射:
PutMapping putMapping = new PutMapping.Builder(
"my_index",
"my_index_type",
"{ \"properties\" : { \"Name\" : {\"type\" : \"string\", \"analyzer\" : \"second\"} } }"
).build();
JestResult result = client.execute(createIndex);
result = client.execute(putMapping);
编辑
我用来创建索引的代码是:
CreateIndex createIndex = new CreateIndex.Builder(indexName)
.settings(
ImmutableSettings.builder()
.loadFromClasspath(
"settings.json"
).build().getAsMap()
).build();
JestResult result = client.execute(createIndex);
settings.json如下所示:
{
"settings": {
"analysis": {
"analyzer": {
"second": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"synonym"
]
}
},
"filter": {
"synonym" : {
"type" : "synonym",
"synonyms" : [
"i pad => ipad",
"smart phone => smartphone",
"i phone => iphone"
]
}
}
}
}
}
但是,我不断得到以下错误:
"MapperParsingException[Analyzer [second] not found for field [message]]"
如果我移除“analyzer”,我可以设置映射。因此,似乎我有两个“settings”部分,但无论我如何构造“settings.json”文件,我总是得到这两个部分。我查看了JEST page中指定的示例,但没有帮助我
有什么想法吗?您正在使用的设置没有正确定义,即您有两个重叠的
设置
部分,索引设置应该如下所示:
{
"my_index": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"number_of_replicas": "1",
"number_of_shards": "5"
},
"analysis": {
"analyzer": {
"second": {
"type": "custom",
"filter": [
"lowercase",
"synonym"
],
"tokenizer": "standard"
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms": [
"i pad => ipad",
"smart phone => smartphone"
]
}
}
}
},
"warmers": {}
}
}
更新
您的settings.json
文件只需包含以下内容:
{
"analysis": {
"analyzer": {
"second": {
"type": "custom",
"filter": [
"lowercase",
"synonym"
],
"tokenizer": "standard"
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms": [
"i pad => ipad",
"smart phone => smartphone"
]
}
}
}
}
您正在使用的设置未正确定义,即您有两个重叠的
设置
部分,索引设置应如下所示:
{
"my_index": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"number_of_replicas": "1",
"number_of_shards": "5"
},
"analysis": {
"analyzer": {
"second": {
"type": "custom",
"filter": [
"lowercase",
"synonym"
],
"tokenizer": "standard"
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms": [
"i pad => ipad",
"smart phone => smartphone"
]
}
}
}
},
"warmers": {}
}
}
更新
您的settings.json
文件只需包含以下内容:
{
"analysis": {
"analyzer": {
"second": {
"type": "custom",
"filter": [
"lowercase",
"synonym"
],
"tokenizer": "standard"
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms": [
"i pad => ipad",
"smart phone => smartphone"
]
}
}
}
}
是的,你是对的。我可以使用CURL创建带有一个“设置”部分的索引。但是,当我使用JEST库时,我总是得到两个。我编辑了我的问题,以便您可以看到我使用的“settings.json”。你能不能看一看,让我知道,如果需要以不同的方式构造它?Thnx,它工作了!我以前也尝试过(删除了“settings”部分),但实际情况是Eclipse没有更新“settings.json”,我一直得到相同的结构(使用双“settings”部分)。我花了一段时间才弄明白这一点,并且感到非常沮丧。现在,每次更改settings.json时,我都会刷新项目,以便Eclipse加载新更改的文件。干杯,谢谢你的帮助真棒,很高兴我能帮忙!!是的,你是对的。我可以使用CURL创建带有一个“设置”部分的索引。但是,当我使用JEST库时,我总是得到两个。我编辑了我的问题,以便您可以看到我使用的“settings.json”。你能不能看一看,让我知道,如果需要以不同的方式构造它?Thnx,它工作了!我以前也尝试过(删除了“settings”部分),但实际情况是Eclipse没有更新“settings.json”,我一直得到相同的结构(使用双“settings”部分)。我花了一段时间才弄明白这一点,并且感到非常沮丧。现在,每次更改settings.json时,我都会刷新项目,以便Eclipse加载新更改的文件。干杯,谢谢你的帮助真棒,很高兴我能帮忙!!