美文网首页
spring data elasticsearch基本操作

spring data elasticsearch基本操作

作者: 五洋捉鳖zz | 来源:发表于2019-04-30 15:39 被阅读0次
  • spring data elasticsearch算是springboot操作es的一种选择。下面简单介绍下,使用spring data elasticsearch 如何进行数据的增删改查

  • entity构建。此处主要借助了两个注解,@Data是lombok注解,可以帮你生成getter,setter之类的基本方法这里不再赘述。对于es中object对象类型的字段,推荐搭建可以写内部类去定义,如果有很多公共格式的object类型字段,例如User中的BaseInfo。

@Data
@Document(indexName="index_user", type = "type_user", createIndex=false)
 public class UserEntity{

    private String userName;
    private String types;
    private BaseInfo userBaseInfo;
    @Data
    public static class BaseInfo {
          private String sex;
          private String birthday;
    }
}
  1. 如果你的字段名称在es索引mapping中字母大写(可能全大写可能首字母大写),为了使用repo中的方法你可能需要这么设定下序列化与反序列化时的键值,属性上增加jsonProperty注解,用于spring data es查询出数据后反序列化为userEntity时指定字段属性,这样es中查询出的记录就能够顺利的反序列化成对象,比如你有个查询用户信息的接口,还应该加上JsonIgnore,用于在controller层返回数据到前端时 做序列化时忽略 字段属性,不然就会出现返回的数据既有大写又有小写,默认使用的都是jackjson做序列化与反序列化
  2. 如果你要使用repo中的CRUD方法,官方强调,CRUD api只适用于单索引结构的集群,所以如果你的集群中有alias,并且存在read,write之类的别名,建议不要使用repo中的增删改查,可以借助elasticTemplate中的其他api实现指定索引,类型完成增删改查。
@Data
@Document(...)
public class UserExEntity{
    @JsonProperty("YHM")
    private String yhm;
    @JsonProperty("ZHMM")
    private String zhmm;
    @JsonIgnore
    public Stirng getYhm() {
          return yhm;
    }
    @JsonIgnore
    public Stirng getzhmm() {
          return yhm;
    }
}
  • UserRepo。定义一个空接口即可。或者你可以实现一些你的接口,但是我个人认为没有必要。
  public interface Userrepo extends ElasticsearchRepotiory<User,String> {
 }
  • 简单查询过滤字段排序,返回分页结果

@service
public class YourUserServiceImpl {
  @Autowired
  ElasticsearchTemplate elasticsearchTemplate;
  
  public List<UserEntity> getUserInfo() {
    List<UserEntity> result = new ArrayList();
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    boolQueryBuilder.must(QueryBuilders.termQuery(”YHM", "xx"));
    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
    // 注意这里withQuery是替换nativeSearchQueryBuilder中的query,如果你有多个query,最好整合一个再withQuery
    nativeSearchQueryBuilder.withQuery(boolQueryBuilder);
    // 排序与分页,排序这里多个字段再增加一条记录即可,分页这里0代表第一页,8代表每页8调数据。这里查询的是0到8条数据,如果需要查询第二页,应该传参(1,8)
    nativeSearchQueryBuilder.withPageable(PageRequest.of(0, 8));
    nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort("FBSJ").order(SortOrder.DESC));
    // 这里不设置的话,下方查询会默认使用entity上@Document注解设置的索引名称和类型名称
    nativeSearchQueryBuilder.withIndices("设置es索引名称或者别名");
    nativeSearchQueryBuilder.withTypes("设置ES索引类型");
    // 这里有queryForList,你也可以使用QueryForPage,里面有总数之类的扩展字段
    result = elasticsearchTemplate.queryForList(nativeSearchQueryBuilder.build(), News.class);
  }
}

相关文章

网友评论

      本文标题:spring data elasticsearch基本操作

      本文链接:https://www.haomeiwen.com/subject/lzkvnqtx.html