java代码对es操作

基于上篇文档基础上:es配置和工具类

索引

String indexName = "lockie_test2";
  • 新增索引
代码:
boolean index = EsClientUtil.createIndex(indexName);
System.out.println("创建索引是否成功:" + index);

执行结果:
创建索引是否成功:true
  • 检查索引是否存在
代码:
boolean lockie_test = EsClientUtil.checkIndexExist(indexName);
System.out.println("索引是否存在:" + lockie_test);

执行结果:
索引是否存在:true

  • 新增分片索引

调用createIndex默认新增的索引的分片,副本都是1,如果想要指定分片和副本则调用下面的方法

代码:
boolean createIndex = EsClientUtil.createIndex(indexName, 2, 2);
System.out.println("创建分片索引是否成功:" + createIndex);
  • 开启索引
boolean openIndex = EsClientUtil.openIndex(indexName);
        System.out.println("开启索引是否成功:" + openIndex);
  • 关闭索引

索引关闭了就不能执行查询等操作

代码:
boolean closeIndex = EsClientUtil.closeIndex(indexName);
        System.out.println("关闭索引是否成功:" + closeIndex);

  • 删除索引
代码:
boolean deleteIndex = EsClientUtil.deleteIndex(indexName);
System.out.println("删除索引是否成功:" + deleteIndex);

执行结果:
删除索引是否成功:true

Mapping

  • 检查mapping是否存在
boolean checkMappingExist = EsClientUtil.checkMappingExist(indexName);
        System.out.println("mapping是否存在:" + checkMappingExist);

新增索引后mapping默认为空

  • 新增mapping

首先新增一个mapping类,里面定义mapping字段的类型

import com.dst.charge.business.center.es.elasticsearch7.mapping.BaseElasticSearchMapping;
import org.elasticsearch.Version;
import org.elasticsearch.index.mapper.DateFieldMapper;
import org.elasticsearch.index.mapper.NumberFieldMapper;
import org.elasticsearch.index.mapper.RootObjectMapper;
import org.elasticsearch.index.mapper.TextFieldMapper;

import java.io.Serializable;

/**
 * @author: lockie
 * @Date: 2019/12/6 14:13
 * @Description: 用户mapping
 */
public class UserMapping extends BaseElasticSearchMapping {
    private static final String INDEX_TYPE = "document";

    public UserMapping() {
        super(INDEX_TYPE, Version.V_7_3_1);
    }

    @Override
    protected void configureRootObjectBuilder(RootObjectMapper.Builder builder) {
        builder
                .add(new NumberFieldMapper.Builder("userId", NumberFieldMapper.NumberType.INTEGER))
                .add(new TextFieldMapper.Builder("userName"))
                .add(new NumberFieldMapper.Builder("age", NumberFieldMapper.NumberType.INTEGER))
                .add(new TextFieldMapper.Builder("address"))
                .add(new DateFieldMapper.Builder("birthday"))
                .add(new TextFieldMapper.Builder("phoneNumber"))
                .add(new TextFieldMapper.Builder("email"))
                .add(new NumberFieldMapper.Builder("status", NumberFieldMapper.NumberType.INTEGER))
                .add(new TextFieldMapper.Builder("remark"));
    }

}

然后再调用工具类生成mapping

boolean putMapping = EsClientUtil.postMapping(indexName, new UserMapping());
        System.out.println("新增mapping是否成功:" + putMapping);

文档

首先创建mapping对应的java对象 UserEntity

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * @author: lockie
 * @Date: 2019/12/9 17:27
 * @Description:
 */
@Data
public class UserEntity implements Serializable {
    private int userId;
    private String userName;
    private int age;
    private String address;
    private Date birthday;
    private String phoneNumer;
    private String email;
    private int status;
    private String remark;
}
  • 新增、更新、删除文档
UserEntity user = new UserEntity();
user.setUserId(1);
user.setUserName("tom");
user.setAge(20);
user.setAddress("北京市");
user.setBirthday(DateUtil.convert2Date("1999-10-01", DateUtil.DATEFORMAT));
user.setPhoneNumer("13500001111");
user.setEmail("tom@163.com");
user.setStatus(1);

UserEntity user2 = new UserEntity();
user2.setUserId(2);
user2.setUserName("lily");
user2.setAge(22);
user2.setAddress("上海市");
user2.setBirthday(DateUtil.convert2Date("1997-05-21", DateUtil.DATEFORMAT));
user2.setPhoneNumer("13800002222");
user2.setEmail("lily@163.com");
user2.setStatus(1);

UserEntity user3 = new UserEntity();
user3.setUserId(3);
user3.setUserName("Tony");
user3.setAge(30);
user3.setAddress("杭州市");
user3.setBirthday(DateUtil.convert2Date("1989-05-21", DateUtil.DATEFORMAT));
user3.setPhoneNumer("13600003333");
user3.setEmail("Tony@163.com");
user3.setStatus(0);

UserEntity user4 = new UserEntity();
user4.setUserId(4);

// 转成成json字符串形式
String jsonString = JSONObject.toJSONString(user);

// 新增文档
EsClientUtil.addDocByJson(indexName, "4", jsonString);

// 更新文档
EsClientUtil.updateDocByJson(indexName, "3", jsonString);

// 删除文档
EsClientUtil.deleteDoc(indexName, "4");

  • 根据ID获取文档
Map<String, Object> doc = EsClientUtil.getDoc(indexName, "1");
System.out.println("根据ID获取文档数据:" + JSONObject.toJSONString(doc));

根据ID获取文档数据:{"address":"北京市","age":20,"birthday":938707200000,"email":"tom@163.com","phoneNumer":"13500001111","remark":"tom的备注","status":1,"userId":1,"userName":"tom"}

  • 批量新增、更新、删除文档
List<Map<String, String>> params = new ArrayList<>();

UserEntity user5 = new UserEntity();
user5.setUserId(5);
user5.setUserName("Jack");
user5.setAge(38);
user5.setAddress("天津市");
user5.setBirthday(DateUtil.convert2Date("1981-02-11", DateUtil.DATEFORMAT));
user5.setPhoneNumer("131000055555");
user5.setEmail("Jack@163.com");
user5.setStatus(1);
user5.setRemark("Jack的备注");

Map<String, String> map5 = new HashedMap();
map5.put("index", "lockie_test2");
map5.put("id", "5");
map5.put("json", JSONObject.toJSONString(user5));


UserEntity user6 = new UserEntity();
user6.setUserId(6);
user6.setUserName("Rain");
user6.setAge(25);
user6.setAddress("深圳市");
user6.setBirthday(DateUtil.convert2Date("1994-08-01", DateUtil.DATEFORMAT));
user6.setPhoneNumer("131000066666");
user6.setEmail("Rain@163.com");
user6.setStatus(1);
user6.setRemark("Rain的备注");

Map<String, String> map6 = new HashedMap();
map6.put("index", "lockie_test2");
map6.put("id", "6");
map6.put("json", JSONObject.toJSONString(user6));

params.add(map5);
params.add(map6);

// 批量新增
EsClientUtil.bulkAdd(params);

// 批量更新
EsClientUtil.bulkUpdate(params);

// 批量删除
EsClientUtil.bulkDelete(params);
  • 批量获取文档
List<Map<String, Object>> list = EsClientUtil.multiGet(params);
System.out.println("批量获取:" + JSONObject.toJSONString(list));

批量获取:[{"address":"天津市","age":38,"birthday":350668800000,"email":"Jack@163.com","phoneNumer":"131000055555","remark":"Jack的备注","status":1,"userId":5,"userName":"Jack"},{"address":"深圳市","age":25,"birthday":775670400000,"email":"Rain@163.com","phoneNumer":"131000066666","remark":"Rain的备注","status":1,"userId":6,"userName":"Rain"}]

  • 根据条件删除
QueryBuilder deleteBuilder = QueryBuilders.termsQuery("userId", "4");
EsClientUtil.deleteByQuery(indexName, deleteBuilder);

查询

  • 查询所有的数据
// 创建查询条件
QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
SearchSourceBuilder builder = new SearchSourceBuilder();
// 使用query可以排序,使用postFilter不支持排序
builder.query(queryBuilder);
// 设置查询最大数量,默认10条
builder.size(10000);
// 设置排序字段
builder.sort("userId", SortOrder.ASC);

List<UserEntity> searchList = EsClientUtil.search(indexName, builder, UserEntity.class);
System.out.println("全部查询结果:" + JSONObject.toJSONString(searchList));

全部查询结果:[{"address":"北京市","age":20,"birthday":938707200000,"email":"tom@163.com","phoneNumer":"13500001111","remark":"tom的备注","status":1,"userId":1,"userName":"tom"},{"address":"上海市","age":22,"birthday":864144000000,"email":"lily@163.com","phoneNumer":"13800002222","remark":"lily的备注","status":1,"userId":2,"userName":"lily"},{"address":"杭州市","age":30,"birthday":611679600000,"email":"Tony@163.com","phoneNumer":"13600003333","remark":"Tony的备注","status":0,"userId":3,"userName":"Tony"},{"address":"天津市","age":38,"birthday":350668800000,"email":"Jack@163.com","phoneNumer":"131000055555","remark":"Jack的备注","status":1,"userId":5,"userName":"Jack"},{"address":"深圳市","age":25,"birthday":775670400000,"email":"Rain@163.com","phoneNumer":"131000066666","remark":"Rain的备注","status":1,"userId":6,"userName":"Rain"}]

  • 复合查询,多条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.size(10000);
builder.sort("userId", SortOrder.ASC);

// 构建查询条件,年龄在20到30之间,状态是0,或者城市是北京市
QueryBuilder queryBuilder3 = QueryBuilders.boolQuery()
		.must(QueryBuilders.rangeQuery("age").from("20").to("30"))
		.should(QueryBuilders.termsQuery("address", "北京市"))
		.filter(QueryBuilders.termsQuery("status", "0"));
builder.query(queryBuilder3);

List<UserEntity> boolQueryList = EsClientUtil.search(indexName, builder, UserEntity.class);
System.out.println("多条件查询结果:" + JSONObject.toJSONString(boolQueryList));

多条件查询结果:[{"address":"上海市","age":30,"birthday":611679600000,"email":"Tony@163.com","phoneNumer":"13600003333","remark":"Tony的备注","status":0,"userId":3,"userName":"Tony"}]

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值