Spring Data Elasticsearch设置注释未生效

时间:2017-10-05 00:02:12

标签: elasticsearch spring-data-elasticsearch

我正在尝试弹簧数据弹性搜索,并且有一个如下定义的类:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "master", type = "master", shards = 1, replicas = 0)
@Setting(settingPath = "/settings/setting.json")
public class Master {

@Id
private String id;

@MultiField(mainField = @Field(type = FieldType.String, store = true),
        otherFields = {
                @InnerField(suffix = "autocomplete", type = FieldType.String, indexAnalyzer = "autocomplete", searchAnalyzer = "standard")
        }
)
private String firstName;

private String lastName;

}

设置文件位于/src/main/settings/setting.json下,如下所示

{
  "index": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20
        }
      },
      "analyzer": {
        "autocomplete": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    }
  }
}

我首先删除索引来运行我的测试类,并重新创建像这样的索引

    elasticsearchTemplate.deleteIndex(Master.class);
    elasticsearchTemplate.createIndex(Master.class);
    elasticsearchTemplate.putMapping(Master.class);
    elasticsearchTemplate.refresh(Master.class);

但是当我尝试将某些内容保存到索引中时,MapperParsingException会出现此错误消息:

2017-10-04 18:56:31.806 ERROR 2942 --- [           main] .d.e.r.s.AbstractElasticsearchRepository : failed to load elasticsearch nodes : org.elasticsearch.index.mapper.MapperParsingException: analyzer [autocomplete] not found for field [autocomplete]

花了4个小时试图解决这个问题,查看了调试模式日志,没有。

我试图通过删除一个逗号来破解JSON格式,它破坏了以便解释JSON。

我使用RestAPI查询主索引,但设置似乎不包含自动完成分析器或任何分析器。

奇怪的是,即使出现此错误,我的文档也可以保存和查询。但我确实想要这个分析仪。

顺便说一句,这是亲子关系中的父类,如果这是相关的。

1 个答案:

答案 0 :(得分:0)

终于明白了!

我必须使用相同的索引(父和子)在所有域中放置相同的设置,然后删除索引,重新启动服务器,并且它有效!