我有这样的模特:
@Getter
@Setter
@Document(indexName = "indexName", type = "typeName")
@Setting(settingPath = "/elastic/elastic-setting.json")
public class Model extends BaseModel {
@Field(type = FieldType.String, index = FieldIndex.analyzed, analyzer = "customAnalyzer")
private String name;
}
我有弹性设置。内部../ resources / elastic / elastic-setting.json:
{
"index": {
"number_of_shards": "1",
"number_of_replicas": "0",
"analysis": {
"analyzer": {
"customAnalyzer": {
"type": "custom",
"tokenizer": "uax_url_email"
}
}
}
}
}
我清理我的弹性数据库,当我启动我的应用程序时,我有例外:
MapperParsingException[analyzer [customAnalyzer] not found for field [name]]
我的代码出了什么问题? 请帮帮我!
修改
Val ,我认为@Setting就像是@Document的一个补充,但看起来它们可以互换。 在我的情况下,我还有另一个模型,:
@Document(indexName = "indexName", type = "anotherTypeName")
所以,首先我创建一个名为" indexName"的索引。对于anotherModel,接下来当弹性准备Model时,它会看到名称为" indexName"的索引。已创建,他不使用@Setting。
现在我有另一个问题。 如何在java代码中为已创建的索引添加自定义分析器,例如在InitializingBean中。像我这样的分析器是什么?不 - 创造。是的 - 不要创造。
答案 0 :(得分:1)
像这样修改您的elastic-setting.json
文件:
{
"index": {
"number_of_shards": "1",
"number_of_replicas": "0"
},
"analysis": {
"analyzer": {
"customAnalyzer": {
"type": "custom",
"tokenizer": "uax_url_email"
}
}
}
}
}
请注意,您需要先删除索引并重新创建它。
<强>更新强>
您当然可以通过Java代码添加自定义分析器,但是,您将无法更改现有的映射以便使用该分析器,因此您最好擦除索引并从头开始重新创建它一个合适的elastic-setting.json
JSON文件。
答案 1 :(得分:0)
对于Val: 是的,我使用这样的东西。 以前,我在我的一个实体类中添加了@Setting,但是当我启动app时,已经创建了具有相同名称的索引,在Spring Data使用@Setting分析实体之前,并且索引未被修改,因为具有相同名称的索引是已经创建了。
现在我在抽象的baseModel上添加注释@Setting(path =“elastic-setting.json”),首先扫描高级层次结构类,并创建分析器。