bre*_*leq 6 elasticsearch spring-data spring-data-elasticsearch
我正在尝试在我的应用程序中使用ElasticSearch进行全文搜索,这时我正在尝试使用自动完成分析器:
{
"settings": {
"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"
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我的应用程序是使用Spring构建的时,我决定使用Spring-data-elasticsearch并以这种方式映射我的实体:
@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;
}
Run Code Online (Sandbox Code Playgroud)
但是,elasticsearch不会加载自定义分析器:
[DEBUG] org.elasticsearch.action.admin.indices.mapping.put-[Magus]无法将映射放在索引[[estabelecimento]]上,键入[esestabelecimento] org.elasticsearch.index.mapper.MapperParsingException:分析器[自动完成]在org.elasticsearch.index.mapper.core的org.elasticsearch.index.mapper.core.TypeParsers.parseField(TypeParsers.java:220)〜[elasticsearch-1.5.2.jar:na]的字段[nome]中找不到.StringFieldMapper $ TypeParser.parse(StringFieldMapper.java:153)〜[elasticsearch-1.5.2.jar:na] at 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] at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:211)〜[elasticsearch-1.5 org.elasticsearch.index.mapper.DocumentMapperParser.parseCompressed(DocumentMapperParser.java:192)的[.2.jar:na]〜org.elasticsearch.index.mapper.MapperService.parse的[elasticsearch-1.5.2.jar:na] (MapperService.java:434)〜[elasticsearch-1.5.2.jar:na] at org.elasticsearch.cluster.metadata.MetaDataMappingService $ 4.execute(MetaDataMappingService.java:505)〜[elasticsearch-1.5.2.jar:na ],网址为org.elasticsearch.common.util.concurrent上的[elasticsearch-1.5.2.jar:na],位于org.elasticsearch.cluster.service.InternalClusterService $ UpdateTask.run(InternalClusterService.java:365)〜[elasticsearch-1.5.2.jar:na]。PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:188)[elasticsearch-1.5.2.jar:na]位于org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritized。 .2.jar:na],位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.0_77],位于java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_77] at 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]找不到分析器[自动完成]runAndClean(PrioritizedEsThreadPoolExecutor.java:188)[elasticsearch-1.5.2.jar:na] at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:1.5.2。) :na]在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.0_77]在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[na:1.8 .0_77] at java.lang.Thread.run(Thread.java:745)[na:1.8.0_77] [ERROR] org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository-无法加载elasticsearch节点:org。 elasticsearch.index.mapper.MapperParsingException:找不到字段[nome]的分析器[autocomplete]runAndClean(PrioritizedEsThreadPoolExecutor.java:188)[elasticsearch-1.5.2.jar:na] at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:1.5.2。) :na]在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.0_77]在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[na:1.8 .0_77] at java.lang.Thread.run(Thread.java:745)[na:1.8.0_77] [ERROR] org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository-无法加载elasticsearch节点:org。 elasticsearch.index.mapper.MapperParsingException:找不到字段[nome]的分析器[autocomplete]jar:na]在org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:158)[elasticsearch-1.5.2.jar:na]在java.util.concurrent.ThreadPoolExecutor.runWorker(Thread .java:1142)[na:1.8.0_77]在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[na:1.8.0_77]在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]jar:na]在org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor $ TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:158)[elasticsearch-1.5.2.jar:na]在java.util.concurrent.ThreadPoolExecutor.runWorker(Thread .java:1142)[na:1.8.0_77]在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[na:1.8.0_77]在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]在java.util.concurrent上运行(PrioritizedEsThreadPoolExecutor.java:158)[elasticsearch-1.5.2.jar:na]在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.0_77]。 ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[na:1.8.0_77],位于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]的分析器[自动完成]在java.util.concurrent上运行(PrioritizedEsThreadPoolExecutor.java:158)[elasticsearch-1.5.2.jar:na]在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.0_77]。 ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[na:1.8.0_77],位于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]的分析器[自动完成]运行(Thread.java:745)[na:1.8.0_77] [错误] org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository-无法加载elasticsearch节点:org.elasticsearch.index.mapper.MapperParsingException:Analyzer [自动填充]找不到字段[nome]运行(Thread.java:745)[na:1.8.0_77] [错误] org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository-无法加载elasticsearch节点:org.elasticsearch.index.mapper.MapperParsingException:Analyzer [自动填充]找不到字段[nome]
我无法确定问题的原因,我也不知道分析器是否无效或elasticsearch甚至找到了autocomplete-analyser.json文件。我该如何解决?
我想您需要"settings":从 json 文件中删除该字段并只放置内容。
而不是使用:
{
"settings": {
....
}
}
Run Code Online (Sandbox Code Playgroud)
只需使用:
{
"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"
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮到你。。
解决了
经过一番研究,我发现问题是由这个声明引起的:
@Bean
public ElasticsearchOperations elasticsearchTemplate(Client client) {
return new ElasticsearchTemplate(client, new CustomEntityMapper());
}
Run Code Online (Sandbox Code Playgroud)
我删除了这个声明,它开始获取配置。
| 归档时间: |
|
| 查看次数: |
4260 次 |
| 最近记录: |