美文网首页
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