030 elasticsearch查询、聚合

文章目录

    • 查询
    • 聚合查询
      • RestHighLevelClient
      • ElasticsearchRestTemplat

SpringData对ES客户端的封装:ElasticsearchRestTemplate
SpringData对CRUD的封装:ElasticsearchRepository
原生ES客户端:RestHighLevelClient

查询

package com.xd.cubemall.sdes;import com.xd.cubemall.search.CubemallSearchApplication;
import com.xd.cubemall.search.model.Blog;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest(classes = CubemallSearchApplication.class)
public class QueryTest {@Autowiredprivate ElasticsearchRestTemplate template;@Testpublic void testQuery1() {NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchAllQuery()).build();SearchHits<Blog> searchHits = template.search(query, Blog.class);//取总记录数long totalHits = searchHits.getTotalHits();System.out.println("总记录数:" + totalHits);//取文档列表List<SearchHit<Blog>> hits = searchHits.getSearchHits();hits.stream().forEach(h-> System.out.println(h));}@Testpublic void testQuery2() throws Exception {NativeSearchQuery query = new NativeSearchQueryBuilder()//查询设置.withQuery(QueryBuilders.multiMatchQuery("看电影","title","content"))//过滤条件,可以设置多个,支持查询条件.withFilter(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("title", "电影")).should(QueryBuilders.termQuery("content","祝福")))
//                .withFilter(QueryBuilders.termQuery("mobile", "13000000000"))//分页设置.withPageable(PageRequest.of(0, 10))//高亮设置.withHighlightBuilder(new HighlightBuilder()//高亮显示的字段.field("title").field("content")//高亮显示的前缀.preTags("<em>")//高亮显示的后缀.postTags("</em>")).build();//使用template对象执行查询SearchHits<Blog> searchHits = template.search(query, Blog.class);//取返回结果//总记录数long totalHits = searchHits.getTotalHits();System.out.println("总记录数:" + totalHits);//取文档列表List<SearchHit<Blog>> hits = searchHits.getSearchHits();hits.stream().forEach(hit->{//取文档对象Blog blog = hit.getContent();//System.out.println(blog);//取高亮结果Map<String,List<String>> highlightFields = hit.getHighlightFields();//System.out.println(highlightFields);String title = highlightFields.get("title").get(0);String content = highlightFields.get("content").get(0);blog.setTitle(title);blog.setContent(content);System.out.println(blog);});}
}

聚合查询

api使用方法
搜索时,请求体中包含聚合条件
在aggs属性中设置聚合条件:
value_count
max
min
avg

GET blog_1/_search
{"query": {"match_all": {}},"aggs": {"mobile_count": {"value_count": {"field": "mobile"}},"mobile_max":{"max": {"field": "mobile"}}}
}

分桶(分组)聚合

GET blog_1/_search
{"query": {"match_all": {}},"aggs": {"mobile_count": {"value_count": {"field": "mobile"}},"mobile_group":{"terms": {"field": "mobile","size": 10}}}
}

RestHighLevelClient

@Autowiredprivate RestHighLevelClient restHighLevelClient;@Testpublic void testAggs() throws IOException {SearchRequest request = new SearchRequest().indices("blog_1").source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).aggregation(new ValueCountAggregationBuilder("doc_count").field("mobile")).aggregation(new TermsAggregationBuilder("group_count").field("mobile").size(10)));SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);System.out.println(response);}

ElasticsearchRestTemplat

    @Testpublic void testQuery2() throws Exception {NativeSearchQuery query = new NativeSearchQueryBuilder()//查询设置.withQuery(QueryBuilders.multiMatchQuery("看电影","title","content"))//过滤条件,可以设置多个,支持查询条件.withFilter(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("title", "电影")).should(QueryBuilders.termQuery("content","祝福")))
//                .withFilter(QueryBuilders.termQuery("mobile", "13000000000"))//分页设置.withPageable(PageRequest.of(0, 10))//高亮设置.withHighlightBuilder(new HighlightBuilder()//高亮显示的字段.field("title").field("content")//高亮显示的前缀.preTags("<em>")//高亮显示的后缀.postTags("</em>")).addAggregation(new TermsAggregationBuilder("mobile_group").field("mobile")).build();//使用template对象执行查询SearchHits<Blog> searchHits = template.search(query, Blog.class);//取返回结果//总记录数long totalHits = searchHits.getTotalHits();System.out.println("总记录数:" + totalHits);//取文档列表List<SearchHit<Blog>> hits = searchHits.getSearchHits();hits.stream().forEach(hit->{//取文档对象Blog blog = hit.getContent();//System.out.println(blog);//取高亮结果Map<String,List<String>> highlightFields = hit.getHighlightFields();//System.out.println(highlightFields);String title = highlightFields.get("title").get(0);String content = highlightFields.get("content").get(0);blog.setTitle(title);blog.setContent(content);System.out.println(blog);});Aggregations aggregations = searchHits.getAggregations();ParsedStringTerms aggregation = aggregations.get("mobile_group");List<? extends Terms.Bucket> buckets = aggregation.getBuckets();buckets.forEach(e-> {System.out.println(e.getKeyAsString());System.out.println(e.getDocCount());});}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java如何部署web后端服务

java如何部署web后端服务 简单记录一下&#xff0c;方便后续使用。 部署流程 1.web打包 2.关掉需要升级的运行中的服务 /microservice/hedgingcustomer-0.0.1-SNAPSHOT/conf/bin/ 执行脚本 sh shutdown.sh 3.解压文件 返回到/microservice 将升级包上传到该路径&#x…

Open3D-Geometry-11:Mesh deformation 网格变形算法

1. as-rigid-as-possible 如果想根据少量约束使三角形网格变形,可以使用网格变形算法。 Open3D 通过SorkineAndAlexa2007实现了 as-rigid-as-possible 方法,优化了以下能量函数 ∑ i ∑ j ∈ N ( i

JAVA IDEA 取消掉Warning:(22, 14) Class ‘XXXController‘ is never used 提示信息

方法一&#xff1a;代码修改 无用的方法&#xff1a; 删除对应的代码。增加该类对应的应用实现。 方法二&#xff1a;取消掉提示 找到settings—Editor—Inspections&#xff0c;搜索Unused declaration 右边的勾取消掉&#xff0c;对应的校验属性。

rabbitmq踩坑(1)

开发中rabbitmq的配置文件写错了&#xff0c;改正后一直报错 error occurred in message handler [org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint36e73413];nested exception is org.springframework.amqp.AmqpIOException: java.io.IOException 配置…

座舱软件开发“道与术”

脑图 仅仅个人归纳见解&#xff0c;欢迎专家莅临指导。

【CHI】CHI协议自问自答

学习CHI有一段时间了&#xff0c;如今回过头来&#xff0c;再读协议&#xff0c;一些问题做个记录。如果有错误的地方&#xff0c;欢迎指正。如果有其他的问题&#xff0c;也欢迎留言讨论。 spec&#xff1a; IHI0050F_amba_chi_architecture_spec 【持续更新ing】 目录 1. …

react18中如何实现同步的setState来实现所见即所得的效果

在react项目中&#xff0c;实现添加列表项&#xff0c;最后一项自动显示在可视区域范围&#xff01;&#xff01; 实现效果 代码实现 import { useState, useRef } from "react"; import { flushSync } from "react-dom"; function FlushSyncRef() {con…

JVM成神之路

目录 JVM入门关&#xff1a; 一&#xff1a;JVM的内存布局是咋样的&#xff1f; 二&#xff1a;方法区&#xff0c;永久代&#xff0c;元空间有什么区别&#xff1f; 三&#xff1a;常量池和字符串常量池有什么区别&#xff1f; 四&#xff1a;什么是堆溢出&#xff0c;什…

【设计模式】Python 设计模式之建造者模式(Builder Pattern)详解

Python 设计模式之建造者模式&#xff08;Builder Pattern&#xff09;详解 在软件开发中&#xff0c;创建复杂对象往往需要多个步骤&#xff0c;而这些步骤之间的顺序、配置可能有多种变化。为了解决这个问题&#xff0c;建造者模式&#xff08;Builder Pattern&#xff09;应…

结构化系统分析,结构化系统设计(正片)

结构化分析方法&#xff1a;是面向数据流进行需求分析的方法&#xff0c;是用抽象模型的概念&#xff0c;按软件内部数据传递、变换的关系&#xff0c;自顶向下逐层分解&#xff0c;直到找到满足功能要求的所有可实现的软件为止。 数据流图&#xff08;DFD&#xff09;&#xf…

Linux系统:本机(物理主机)访问不了虚拟机中的apache服务问题的解决方案

学习目标&#xff1a; 提示&#xff1a;本文主要讲述-本机(物理主机)访问不了虚拟机中的apache服务情况下的解决方案 Linux系统&#xff1a;Ubuntu 23.04&#xff1b; 文中提到的“本机”&#xff1a;代表&#xff0c;宿主机&#xff0c;物理主机&#xff1b; 首先&#xff0c…

吴恩达深度学习笔记(7)

误差分析&#xff1a; 你运行一个算法代替人类计算&#xff0c;但是没有达到人类的效果&#xff0c;需要手动检查算法中的错误&#xff0c;对模型的一些部分做相应调整&#xff0c;才能更好地提升分类的精度。如果不加分析去做&#xff0c;可能几个月的努力对于提升精度并没有…

旋转花键材质及运用场景

旋转花键的材质有很多种&#xff0c;其材质选择是一个涉及多方面因素的重要决策&#xff0c;‌主要取决于应用场景的具体要求&#xff0c;包括设备的运行环境、负载大小、运行速度以及所需的耐磨性和耐腐蚀性等因素。 1、碳钢&#xff1a;价格低廉、具有较好的韧性和耐磨性&…

【分享】项目开发中的计算问题

事件背景 最近也就上个月吧&#xff0c;拿到一个新的需求&#xff0c;新建一个页面&#xff0c;三个Grid联动&#xff0c;涉及很多的页面和sql以及Java计算。 简略的画个表格表示一下&#xff1a; 第一个Grid&#xff1a; 第二个Grid&#xff1a; 第三个Grid&#xff1a; 业…

openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接

前言 本文主要介绍如何在openKlyin系统中设置ssh连接&#xff0c;并结合cpolar内网穿透工具实现远程也可以ssh连接本地局域网内部署的openKlyin系统. openKylin是中国首个基于Linux 的桌面操作系统开发者平台&#xff0c;通过开放操作系统源代码的方式&#xff0c;打造具有自…

C#从零开始学习(继承)(6)

本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp 使用冒号继承一个基类,子类扩展一个基类时,他会继承它的成员:也就是基类中的所有字段,属性和方法,他们会自动增加到子类 子类覆盖方法改变它继承的成员 基类中的方法增加virtual关键字子类同名方法增加…

滑动窗口经典例题

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 读入n&#xff0c;xn&#xff0c;xn&#xff0c;x,给出nnn个数a[1],a[2],……,a[n]a[1],a[2],……,a[n]a[1],a[2],……,a[n],求最小的区间[l,r][l,r][l,r]&#xff0c;使a[l]a[l1]……

Axure显示与隐藏——元件动作一

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;显示与隐藏 主要内容&#xff1a;显示/隐藏/切换三种效果&#xff0c;动画效果&#xff0c;更多效果 应用场景&#xff1a;元件自身状态变化、操作…

LinkedList作者:我虽然开发了LinkedList,但是我更爱用ArrayList

感谢Java面试教程关于LinkedList经验分享 PS冷知识&#xff1a;LinkedList的作者更爱使用ArrayList。 ArrayList 和 LinkedList 是 Java 中两种常见的 List 实现类&#xff0c;它们在底层数据结构、性能特征和使用场景上有显著的区别。 底层数据结构&#xff1a; ArrayList …

Flux.never 使用说明书

public static <T> Flux<T> never()Create a Flux that will never signal any data, error or completion signal. 创建一个永远不会发出任何数据、错误或完成信号的 Flux。 Type Parameters: T - the Subscriber type target Returns: a never completing Flu…