我正在尝试弹簧数据弹性搜索,并且有一个如下定义的类:
@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查询主索引,但设置似乎不包含自动完成分析器或任何分析器。
奇怪的是,即使出现此错误,我的文档也可以保存和查询。但我确实想要这个分析仪。
顺便说一句,这是亲子关系中的父类,如果这是相关的。
答案 0 :(得分:0)
终于明白了!
我必须使用相同的索引(父和子)在所有域中放置相同的设置,然后删除索引,重新启动服务器,并且它有效!