elasticsearch - spring-data-elasticsearch - 注册自定义分析器

标签 elasticsearch spring-data spring-data-elasticsearch

我正在尝试在我的应用程序中使用 ElasticSearch 进行全文搜索,此时我正在尝试使用 autocomplete analyser :

{
    "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"
                    ]
                }
            }
        }
    }
}

因为我的应用程序是用 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;
}

但是,elasticsearch 没有加载自定义分析器:

[DEBUG] org.elasticsearch.action.admin.indices.mapping.put - [Magus] failed to put mappings on indices [[estabelecimento]], type [esestabelecimento] org.elasticsearch.index.mapper.MapperParsingException: Analyzer [autocomplete] not found for field [nome] at org.elasticsearch.index.mapper.core.TypeParsers.parseField(TypeParsers.java:220) ~[elasticsearch-1.5.2.jar:na] at org.elasticsearch.index.mapper.core.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] at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseObjectOrDocumentTypeProperties(ObjectMapper.java:214) ~[elasticsearch-1.5.2.jar:na] at 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.2.jar:na] at org.elasticsearch.index.mapper.DocumentMapperParser.parseCompressed(DocumentMapperParser.java:192) ~[elasticsearch-1.5.2.jar:na] at org.elasticsearch.index.mapper.MapperService.parse(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] at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:365) ~[elasticsearch-1.5.2.jar:na] at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:188) [elasticsearch-1.5.2.jar:na] at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:158) [elasticsearch-1.5.2.jar:na] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_77] at 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 - failed to load elasticsearch nodes : org.elasticsearch.index.mapper.MapperParsingException: Analyzer [autocomplete] not found for field [nome]

我无法确定问题的原因,我不知道是分析器无效还是elasticsearch甚至找到了autocomplete-analyser.json文件。我该如何解决这个问题?

最佳答案

我想您需要从 json 文件中删除字段 "settings": 并只放入内容。

而不是使用:

{
"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"
      ]
     }
    }
   } 
  }
}

希望对你有帮助

关于elasticsearch - spring-data-elasticsearch - 注册自定义分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36238978/

相关文章:

java - findBy 查询方法在 spring 数据 Elasticsearch 中不起作用

java - 如何使用 Spring-data-elastic 查询 Elastic

java - 为什么使用@Query (“” )操作Elasticsearch并报错(org.elasticsearch.common.ParsingException : no [query] registered for [query])

elasticsearch - Kubernetes中的Elasticsearch高可用设置

elasticsearch - Titan存在索引时找不到合适的索引

c# - 使用 NEST C# 客户端搜索 ElasticSearch

java - 更新多对多关系以包含新字段

elasticsearch - Elasticsearch和Kibana-Kibana服务器尚未准备好

scala - 创建 Spring Data JPA 存储库的 Scala 方法

java - Spring-data-mongodb @DBRef 导致无限递归?我不明白为什么