弹簧数据弹性搜索-注册自定义分析器
我正在尝试在我的应用程序中使用ElasticSearch进行全文搜索,目前我正在尝试使用: 由于我的应用程序是用Spring构建的,所以我决定使用Spring数据elasticsearch并以这种方式映射我的实体:弹簧数据弹性搜索-注册自定义分析器,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我正在尝试在我的应用程序中使用ElasticSearch进行全文搜索,目前我正在尝试使用: 由于我的应用程序是用Spring构建的,所以我决定使用Spring数据elasticsearch并以这种方式映射我的实体: @Document(indexName = "estabelecimento") @Setting(settingPath = "/elasticsearch/autocomplete-analyser.json") public class ESEstabelecimento {
@Document(indexName = "estabelecimento")
@Setting(settingPath = "/elasticsearch/autocomplete-analyser.json")
public class ESEstabelecimento {
private Long id;
@Field(type = FieldType.String, indexAnalyzer = "autocomplete")
private String nome;
private String razaoSocial;
private String tipoEstabelecimento;
@Field(type = FieldType.Object)
private ESCidade cidade;
}
但是,elasticsearch没有加载自定义分析器:
[DEBUG]org.elasticsearch.action.admin.indexes.mapping.put-[Magus]未能在索引[[Establecimento]]上放置映射,键入[esestabelecimento]
org.elasticsearch.index.mapper.MapperParsingException:未找到字段[nome]的分析器[autocomplete]
在org.elasticsearch.index.mapper.core.TypeParsers.parseField(TypeParsers.java:220)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.index.mapper.core.StringFieldMapper$TypeParser.parse(StringFieldMapper.java:153)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseProperties(ObjectMapper.java:290)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseObjectOrDocumentTypeProperties(ObjectMapper.java:214)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.index.mapper.object.RootObjectMapper$TypeParser.parse(RootObjectMapper.java:136)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:211)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.index.mapper.DocumentMapperParser.parseCompressed(DocumentMapperParser.java:192)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.index.mapper.MapperService.parse(MapperService.java:434)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.cluster.metadata.MetaDataMappingService$4.execute(MetaDataMappingService.java:505)~[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:365)~[elasticsearch-1.5.2.jar:na]
位于org.elasticsearch.common.util.concurrent.PrioritizedThreadPoolExecutor$TiebreakingPriorizedRunnable.runAndClean(priorizedThreadPoolExecutor.java:188)[elasticsearch-1.5.2.jar:na]
在org.elasticsearch.common.util.concurrent.PrioritizedThreadPoolExecutor$TiebreakingPriorizedRunnable.run(priorizedThreadPoolExecutor.java:158)[elasticsearch-1.5.2.jar:na]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.077]
在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[na:1.8.077]
在java.lang.Thread.run(Thread.java:745)[na:1.8.0_77]
[错误]org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository-未能加载elasticsearch节点:org.elasticsearch.index.mapper.MapperParsingException:未找到字段[nome]的Analyzer[autocomplete]
我无法确定问题的原因,我不知道分析仪是否无效,或者elasticsearch是否找到了autocomplete-analyzer.json文件。如何解决这个问题?我想您需要从json文件中删除字段
“设置”:
,只放内容
而不是使用:
{
"settings": {
....
}
}
只需使用:
{
"index": {
"number_of_shards": 1,
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
}
}
希望它能帮助你解决问题 经过一些研究,我发现问题是由以下声明引起的:
@Bean
public ElasticsearchOperations elasticsearchTemplate(Client client) {
return new ElasticsearchTemplate(client, new CustomEntityMapper());
}
我删除了此声明,它开始获取配置。我遇到了类似的问题,这可能是由于多种原因造成的:
同样的结果。。。有没有办法调试@Setting?我想问题可能就在那里……只是确认一下,您的json文件是否与
设置路径中提到的位置相同?是的。该文件位于src/main/resources/elasticsearch/autocomplete-analyzer.json中。我尝试了完整路径:/home/hudson/。。。但是结果是相同的,移动analyzer部分,看看有多少碎片被创建。如果设置中提到的是1,那么我们将确保正在读取json文件,并且analyzer中存在一些问题。如果创建的碎片数为5(默认值),则这将推断您的json文件没有被读取。它没有读取文件:[DEBUG]org.elasticsearch.index.memory-[Nightside]重新计算碎片索引缓冲区(reason=[[ADDED]]),总数为[354.3mb],其中有[5]个活动碎片,每个碎片设置为索引=[70.8mb],translog=[64kb]您是否在尝试之间删除了索引?它只会在索引不存在时创建索引。如果索引已经存在,则不会更新设置。首先删除索引,让spring重新创建它。您还可以使用GET/estabelecimento/\u settings检查设置,这可能会提供一些见解。
@Bean
public ElasticsearchOperations elasticsearchTemplate(Client client) {
return new ElasticsearchTemplate(client, new CustomEntityMapper());
}