在使用映射和设置创建索引时,分析器未找到异常 [英] Analyzer not found exception while creating an index with mapping and settings
本文介绍了在使用映射和设置创建索引时,分析器未找到异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
设置: -
XContentBuilder settings = XContentFactory.jsonBuilder()
.startObject()
.startObject(settings)
.startObject (analysis)
.startObject(analyzer)
.startObject(search_analyzer)
.field(tokenizer,ngram_specification)
.field(类型,自定义)
.field(filter,new String [] {ngram_specification})
.endObject()
.endObject()
.startObject (ngram_specification)
$ f
.field(min_gram,2)
.field(max_gram,5)
.endObject()
.endObject()
.endObject()
.endObject();
映射: -
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ b $ $ b .startObject(email)。field(type,string)。field(index,resolved)。field(analyzer,search_analyzer)
.endObject()
.endObject()
.endObject()
.endObject();
创建索引: -
CreateIndexRequest indexRequest = new CreateIndexRequest(indexName);
indexRequest.settings(settings);
indexRequest.mapping(sample,mapping);
CreateIndexResponse response = client.admin()。indexes()。create(indexRequest).actionGet();
异常:
code> 17:00:52,767 ERROR [STDERR] org.elasticsearch.index.mapper.MapperParsingException:mapping [3]
17:00:52,767 ERROR [STDERR]在org.elasticsearch.cluster.metadata。 MetaDataCreateIndexService $ 1.execute(MetaDataCreateIndexService.java:289)
17:00:52,767错误[STDERR]在org.elasticsearch.cluster.service.InternalClusterService $ 2.run(InternalClusterService.java:229)
17: 00:52,767 ERROR [STDERR] at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritizedRunnable.run(PrioritizedEthreadPoolExecutor.java:95)
17:00:52,767错误[STDERR]在java.util.concurrent。 ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)
17:00:52,767错误[STDERR]在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)
17: 00:52,767 ERROR [STDERR] java.lang.Thread.run(Thread.java:662)
17:00:52,767错误[STDERR]导致:org.elasticsearch.index.mapper.MapperParsingException:找不到字段[email]的分析器[search_analyzer]
17:00:52,767错误[STDERR]在org.elasticsearch .index.mapper.core.TypeParsers.parseField(TypeParsers.java:100)
17:00:52,767错误[STDERR]在org.elasticsearch.index.mapper.core.StringFieldMapper $ TypeParser.parse(StringFieldMapper.java :151)
17:00:52,767错误[STDERR]在org.elasticsearch.index.mapper.object.ObjectMapper $ TypeParser.parseProperties(ObjectMapper.java:263)
17:00:52,767错误[ STDERR]在org.elasticsearch.index.mapper.object.ObjectMapper $ TypeParser.parse(ObjectMapper.java:219)
17:00:52,767 ERROR [STDERR]在org.elasticsearch.index.mapper.DocumentMapperParser.parse (DocumentMapperParser.java:176)
17:00:52,767错误[STDERR]在org.elasticsearch.index.mapper.MapperService.parse(MapperService.java:380)
17:00:52,767错误[ STDERR]在org.el asticsearch.index.mapper.MapperService.merge(MapperService.java:190)
17:00:52,767错误[STDERR]在org.elasticsearch.cluster.metadata.MetaDataCreateIndexService $ 1.execute(MetaDataCreateIndexService.java:286)]
任何人都可以用这种方式说出错误?
解决方案
我找到了解决方案。在设置中,如果您使用索引而不是设置,则可以正常运行。
这是错误的:
XContentBuilder settings = XContentFactory.jsonBuilder()
.startObject()
.startObject(settings)//settings
。 startObject(analysis)
但是这个 :
XContentBuilder settings = XContentFactory.jsonBuilder()
.startObject()
.startObject(index)//索引而不是设置
.startObject(分析)
Hi I am using Elastic Search elasticsearch-0.90.2 version. I am trying to map analyzer with custom analyzer using jsonBuilder, while creating index, it is throwing exception like analyzer not found.
Setting :-
XContentBuilder settings = XContentFactory.jsonBuilder()
.startObject()
.startObject("settings")
.startObject("analysis")
.startObject("analyzer")
.startObject("search_analyzer")
.field("tokenizer", "ngram_specification")
.field("type", "custom")
.field("filter", new String[]{ "ngram_specification"})
.endObject()
.endObject()
.startObject("ngram_specification")
.field("type", "nGram")
.field("min_gram", "2")
.field("max_gram", "5")
.endObject()
.endObject()
.endObject()
.endObject();
Mapping :-
XContentBuilder mapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("sample")
.startObject("properties")
.startObject("email").field("type", "string").field("index", "analyzed").field("analyzer", "search_analyzer")
.endObject()
.endObject()
.endObject()
.endObject();
Creating Index like this :-
CreateIndexRequest indexRequest = new CreateIndexRequest(indexName);
indexRequest.settings(settings);
indexRequest.mapping("sample", mapping);
CreateIndexResponse response = client.admin().indices().create(indexRequest).actionGet();
Exception :
17:00:52,767 ERROR [STDERR] org.elasticsearch.index.mapper.MapperParsingException: mapping [3]
17:00:52,767 ERROR [STDERR] at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:289)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.cluster.service.InternalClusterService$2.run(InternalClusterService.java:229)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:95)
17:00:52,767 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
17:00:52,767 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
17:00:52,767 ERROR [STDERR] at java.lang.Thread.run(Thread.java:662)
17:00:52,767 ERROR [STDERR] Caused by: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [search_analyzer] not found for field [email]
17:00:52,767 ERROR [STDERR] at org.elasticsearch.index.mapper.core.TypeParsers.parseField(TypeParsers.java:100)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.index.mapper.core.StringFieldMapper$TypeParser.parse(StringFieldMapper.java:151)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseProperties(ObjectMapper.java:263)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parse(ObjectMapper.java:219)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:176)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.index.mapper.MapperService.parse(MapperService.java:380)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:190)
17:00:52,767 ERROR [STDERR] at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:286)]
Can anyone please tell the mistake in this approach?
解决方案
I found the solution for this. In Settings, if you use "index" instead of "Settings" then it will work fine.
This is wrong:
XContentBuilder settings = XContentFactory.jsonBuilder()
.startObject()
.startObject("settings") // "settings"
.startObject("analysis")
but this does:
XContentBuilder settings = XContentFactory.jsonBuilder()
.startObject()
.startObject("index") // "index" instead of "settings"
.startObject("analysis")
这篇关于在使用映射和设置创建索引时,分析器未找到异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文