spring elasticsearch

基于spring data使用Elasticsearch

定义Mapping

@Setting注解

可以通过该注解自定义一些设置,例如分片等等

1
2
@Setting(settingPath=/com/test/house/domain/houseSetting.json)
// 注意:路径为文件所在包路径转换为反斜杠模式,第一个反斜杠不能去掉

第一种方式:@Document注解

1
2
3
4
5
6
7
8
9
10
@Document(indexName = "test_index", type = "house", shards = 3, replicas = 1, refreshInterval = "-1")
// 功能上比较简单,可以在属性上使用@Id,@Field等注解标注字段类型和索引方式
//定义字符串类型的ID字段
@Id
@Field(type = FieldTYpe.String, index = FiledIndex.not_analyzed)
private String id;
//比较适合简单场景,需要自定义一些Mapping配置时候比较无力,使用版本为Spring Boot1.2.2,不知道最新版有何变化?
// 比如:我需要启用_timestamp功能就完全没有找到办法...

第二种方式:@Mapping注解

1
2
3
4
5
6
7
8
9
10
// 这种方式可以按照自己的意图定义索引,但是比较麻烦的是JavaBean和Mapping之间的映射关系,需要写两遍
@Mapping(mappingPath="/com/test/house/domain/house.json")
{
"house":{
"_timestamp":{"enabled":true}
},
"properties":{
...
}
}

上面两种方式不能一起使用,Mapping会覆盖Document的配置,很麻烦啊,我只是想要简单的配置一个_timestamp.enabled=true,而又不像在json文件中
把Mapping全部重写一遍,还是没有找到好的解决办法…实在不行就自定义字段解决了…

看了es客户端jar中倒是有TimeStamp的支持,错略看了下Spring Data Es的代码,发现这个版本完全没有啊,尼玛应该是没有这个支持…

最终只有曲线救国了,自己设置了一个ts字段进行维护(┬_┬),这些该死的库带来的方便的同时也真是带来不少的麻烦啊,下次再做项目一定自己封装一个…

Es中关于建议功能的几种实现方式

不错的文章