我在我的Java Spring应用程序中使用elasticsearch,因为使用了springsearch Spring JPA。 我在java中有一个文档和相应的类,其中包含所有不应编入索引的字段(我使用java api中的termFilter语句搜索它们以获得完全匹配) 在我的情况下,我必须注释每个字段
@Field(type = FieldType.String,index = FieldIndex.not_analyzed)
我得到这样的东西
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Document(indexName = "message", type = "message")
public class Message implements Serializable {
@Id
@NotNull
@JsonProperty("id")
private String id;
@JsonProperty("userName")
@Field(type = FieldType.String, index = FieldIndex.not_analyzed)
private String userName;
@NotNull
@JsonProperty("topic")
@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String topic;
@NotNull
@JsonProperty("address")
@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String address;
@NotNull
@JsonProperty("recipient")
@Field(index = FieldIndex.not_analyzed, type = FieldType.String)
private String recipient;
}
是否有可能在类上添加注释,以便不在所有字段上复制它?
答案 0 :(得分:1)
使用原始映射+ dynamic templates,您可以在没有@Field
注释的情况下实现目标。
使用@Mapping
注释
@Mapping(mappingPath = "/mappings.json")
然后在mappings.json
中定义您的映射:
{
"mappings": {
"message": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
}
}
注意:我没有测试过,所以请检查拼写错误。