Java ‘Elasticsearch‘ 操作

依赖

复制代码
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.3.12.RELEASE</version>
</dependency>

配置

复制代码
spring:
  elasticsearch:
    uris: http://192.168.0.226:9200

对象

复制代码
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;

添加索引操作

复制代码
elasticsearchRestTemplate.indexOps(IndexCoordinates.of("indexname")).create();

IndexCoordinates可以给多个索引

删除索引

elasticsearchRestTemplate.indexOps(IndexCoordinates.of("indexname")).delete();

添加操作

复制代码
IndexQuery indexQuery = new IndexQueryBuilder()
        .withId(productId)
                .withObject(product4ES)
                        .build();
elasticsearchRestTemplate.index(indexQuery, IndexCoordinates.of("products"));

查询操作

这个类是封装查询数据的

NativeSearchQuery query = new NativeSearchQueryBuilder()

要查询的字段

.withQuery(multiMatchQuery(keyword, "productName", "productSkuName"))

分页由于里面比尔帮你做好了就不要套用公式了

.withPageable(PageRequest.of(pageNum - 1, limit))

这里是高亮显示,用的是可变参数

.withHighlightFields(new HighlightBuilder.Field("productName").preTags("<label style='color: red'>").postTags("</label>"), new HighlightBuilder.Field("productSkuName").preTags("<label style='color: red'>").postTags("</label>"))

这里是构建

.build();

复制代码
elasticsearchRestTemplate.search调用这个方法
复制代码
search(封装的查询调教, 里面装的类型自动的, IndexCoordinates.of("要差的索引"))
复制代码
SearchHits得到这个
复制代码
search.getTotalHits();获取查询到的count

product4ES是我自己创建的然后装得到index

获取搜索的结果

复制代码
List<SearchHit<Product4ES>> searchHits = search.getSearchHits();
创建一个等等用
List<Product4ES> list = new ArrayList<>();
for (SearchHit<Product4ES> hit : searchHits) {
获取返回的对象用什么对象装的什么对象拿自动的
    Product4ES product4ES = hit.getContent();
获取高亮map对象多个高亮map就有多个值
    Map<String, List<String>> highlightFields = hit.getHighlightFields();
获取叫下面这个名字的字段的高亮文本这里可能一段文字多个高亮
    List<String> productName = highlightFields.get("productName");
    if (!productName.isEmpty()) {
拿到第一个高亮,并设置
        product4ES.setProductName(productName.get(0));
    }
设置到对象
    list.add(product4ES);
}

计算总页数

复制代码
int pageCount = ((int) (count % limit == 0 ? count / limit : count / limit + 1));
相关推荐
微露清风9 分钟前
系统性学习C++-第五讲-内存管理
java·c++·学习
计算机毕业设计木哥13 分钟前
计算机毕业设计选题推荐:基于SpringBoot和Vue的快递物流仓库管理系统【源码+文档+调试】
java·vue.js·spring boot·后端·课程设计
qiuiuiu41314 分钟前
正点原子RK3568学习日志-编译第一个驱动程序helloworld
linux·c语言·开发语言·单片机
2351618 分钟前
【LeetCode】146. LRU 缓存
java·后端·算法·leetcode·链表·缓存·职场和发展
聪明的笨猪猪22 分钟前
Java Redis “运维”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
FIavor.39 分钟前
怎么办这是Apifox里执行http://localhost:9002/goods/getByUserName?name=“张三“为什么我改了还是500?
java·网络·网络协议·http
编程饭碗40 分钟前
【Java集合】
java
岁岁岁平安41 分钟前
Java的双重检查锁机制(DCL)与懒加载的单例模式
java·单例模式·synchronized·
Jabes.yang1 小时前
Java面试场景:从Spring Boot到Kubernetes的技术问答
java· 面试· spring boot· 微服务· kubernetes· 技术栈· redis
molong9311 小时前
Kotlin 内联函数、高阶函数、扩展函数
android·开发语言·kotlin