当前位置: 首页 > news >正文

Java如何操作Elasticsearch

目录

前言

Procuct实体类

一、操作索引

二、操作文档

三、查询文档

四、复杂条件查询

五、分页查询

六、结果排序


本文文章介绍的是通过template的方法操作elasticsearch,他的话直接本地注入使用就行,repository方法还需要实现接口,所以我个人喜欢template(他还支持复杂查询嘞!)

前言

Procuct实体类

@Document(indexName = "product",createIndex = true)
@Data
@AllArgsConstructor
public class Product {@Id@Field(type = FieldType.Integer,store = true,index = true)private Integer id;@Field(type = FieldType.Text,store = true,index = true,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")private String productName;@Field(type = FieldType.Text,store = true,index = true,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")private String productDesc;
}

一、操作索引

@SpringBootTest
public class TemplateTest {@Autowiredprivate ElasticsearchTemplate template;// 新增索引@Testpublic void addIndex() {// 获得索引操作对象IndexOperations indexOperations = template.indexOps(Product.class);// 创建索引,注:该方法无法设置索引结构,不推荐使用indexOperations.create();}// 删除索引@Testpublic void delIndex() {// 获得索引操作对象IndexOperations indexOperations = template.indexOps(Product.class);// 删除索引indexOperations.delete();}
}

不过一般我们创建索引在实体类创建时就创建或者是在kibna中自己创建就行!

二、操作文档

// 新增/修改文档
@Test
public void addDocument() {Product product = new Product(7, "es1", "es是一款优秀的搜索引擎");template.save(product);
}// 删除文档
@Test
public void delDocument() {template.delete("7", Product.class);
}// 根据id查询
@Test
public void findAllDocument() {Product product = template.get("1", Product.class);System.out.println(product);
}

三、查询文档

template的search方法可以查询文档

SearchHits<T> search(Query query, Class<T> clazz):查询文档,query是查询条件对象,clazz是结果类型。
// 查询文档2
@Test
public void searchDocument2() {String productName = "三体";String productDesc = "优秀";// 1.构建查询条件NativeQuery query=new NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).build();// 2.查询SearchHits<Product> result = template.search(query, Product.class);// 3.处理查询结果for (SearchHit<Product> productSearchHit : result) {Product product = productSearchHit.getContent();System.out.println(product);}
}

四、复杂条件查询

// 复杂查询
@Test
public void searchDocument2(){String productName = "三体";String productDesc = "优秀";// 1.构造查询条件NativeQueryBuilder nativeQueryBuilder = new NativeQueryBuilder();// 如果没有传入参数,查询所有if (productName == null && productDesc == null){nativeQueryBuilder.withQuery(Queries.matchAllQueryAsQuery());}else {BoolQuery.Builder boolQuery = QueryBuilders.bool();if (productName != null){boolQuery.must(Queries.matchQueryAsQuery("productName",productName,null,null));}if (productDesc != null){boolQuery.must(Queries.matchQueryAsQuery("productDesc",productDesc,null,null));}nativeQueryBuilder.withQuery(boolQuery.build()._toQuery());}NativeQuery query = nativeQueryBuilder.build();// 2.查询SearchHits<Product> result = template.search(query, Product.class);// 3.处理查询结果for (SearchHit<Product> productSearchHit : result) {Product product = productSearchHit.getContent();System.out.println(product);}
}

五、分页查询

// 分页查询文档
@Test
public void searchDocumentPage() {// 1.构建查询条件Pageable pageable = PageRequest.of(0, 3);NativeQuery query = new NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).withPageable(pageable).build();// 2.查询SearchHits<Product> result = template.search(query, Product.class);// 3.处理查询结果List<Product> content = new ArrayList();for (SearchHit<Product> productSearchHit : result) {Product product = productSearchHit.getContent();content.add(product);}/*** 封装Page对象,参数1:具体数据,参数2:分页条件对象,参数3:总条数*/Page<Product> page = new PageImpl(content, pageable, result.getTotalHits());System.out.println(page.getTotalElements());System.out.println(page.getTotalPages());System.out.println(page.getContent());
}

六、结果排序

// 结果排序
@Test
public void searchDocumentSort() {// 1.构建查询条件NativeQuery query = new NativeQueryBuilder().withQuery(Queries.matchAllQueryAsQuery()).withSort(Sort.by(Sort.Direction.DESC, "id")).build();// 2.查询SearchHits<Product> result = template.search(query, Product.class);// 3.处理查询结果for (SearchHit<Product> productSearchHit : result) {Product product = productSearchHit.getContent();System.out.println(product);}
}

http://www.lryc.cn/news/446769.html

相关文章:

  • cpu路、核、线程、主频、缓存
  • 【AI算法岗面试八股面经【超全整理】——深度学习】
  • STL——map和set【map和set的介绍和使用】【multimap和multiset】
  • 【笔记】神领物流配置本地hosts无法访问域名(排除DNS 排除文件编码问题)已解决
  • Java | Leetcode Java题解之第424题替换后的最长重复字符
  • Xcode 16 Pod init 报错
  • 【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)
  • Docker 教程:如何查看容器的最后 300 行实时日志
  • Qwen2-VL论文阅读笔记
  • APScheduler、Django实现定时任务,以及任务动态操作
  • SpringBoot开发——整合Apache POI轻松生成精美的Excel报表
  • 海信智能电视的使用心得
  • 【YashanDB知识库】客户端字符集与数据库字符集兼容问题
  • Session和Cookie是什么?有什么区别?分布式Session问题又是什么?
  • 项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持windows、linux、国产麒麟系统)
  • CSS开发全攻略
  • OpenCV运动分析和目标跟踪(3)计算图像序列的加权平均值函数accumulateWeighted()的使用
  • vue3中echarts柱状图横轴文字太多放不下怎么解决
  • Web 开发安全与最佳实践:MVC、会话管理与常见攻击防御
  • Segformer双显卡推理速度测试
  • 使用在线电子模拟器 Wokwi 运行 ESP32 示例(Arduino IDE、ESP32C3)
  • vue3+element-plus icons图标选择组件封装
  • Spring validation校验框架
  • UBUNTU20.04安装CH384串口卡驱动
  • JWT(JSON Web Tokens) 详细介绍
  • 数据结构练习题————(二叉树)——考前必备合集!
  • 一天认识一个硬件之鼠标
  • Django 请求配置
  • 轮播图组件更加完善版
  • cpu路、核、线程