首页 > 其他分享 >ES操作参考

ES操作参考

时间:2023-08-19 20:46:22浏览次数:32  
标签:map hit searchSourceBuilder title highlightBuilder 参考 userSearchDto 操作 ES

@Autowired
	private RestHighLevelClient restHighLevelClient;

	@Override
	public ResponseResult search(UserSearchDto userSearchDto) throws IOException {
		//1 检查参数
		if (userSearchDto==null|| StringUtils.isBlank(userSearchDto.getSearchWords())){
			return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
		}
		//2 设置查询条件
		SearchRequest searchRequest = new SearchRequest("app_info_article");
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		//布尔查询
		BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
		//关键字的分词之后查询
		QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders.queryStringQuery(userSearchDto.getSearchWords())
				.field("title").field("content").defaultOperator(Operator.OR);
		boolQueryBuilder.must(queryStringQueryBuilder);
		//查询小于mindate的数据
		RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("publishTime").lt(userSearchDto.getMinBehotTime().getTime());
		boolQueryBuilder.filter(rangeQueryBuilder);
		//分页查询
		searchSourceBuilder.from(0);
		searchSourceBuilder.size(userSearchDto.getPageSize());
		//按照发布时间倒序查询
		searchSourceBuilder.sort("publishTime", SortOrder.DESC);
		//设置高亮域 title
		HighlightBuilder highlightBuilder = new HighlightBuilder();
		highlightBuilder.field("title");
		highlightBuilder.preTags("<font style='color: red; font-size: inherit;'>");
		highlightBuilder.postTags("</font>");
		searchSourceBuilder.highlighter(highlightBuilder);

		searchSourceBuilder.query(boolQueryBuilder);
		searchRequest.source(searchSourceBuilder);
		SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
		//3 结果封装返回
		ArrayList<Map> list = new ArrayList<>();
		SearchHit[] hits = searchResponse.getHits().getHits();
		for (SearchHit hit : hits) {
			String json = hit.getSourceAsString();
			Map map = JSON.parseObject(json, Map.class);
			//处理高亮
			if (hit.getHighlightFields()!=null&&hit.getHighlightFields().size()>0){
				Text[] titles = hit.getHighlightFields().get("title").getFragments();
				String title = StringUtils.join(titles);
				//高亮标题
				map.put("h_title",title);
			}else {
				//原始标题
				map.put("h_title",map.get("title"));
			}
			list.add(map);
		}
		return ResponseResult.okResult(list);

标签:map,hit,searchSourceBuilder,title,highlightBuilder,参考,userSearchDto,操作,ES
From: https://www.cnblogs.com/jintaocode/p/17643081.html

相关文章

  • Deno 中使用 @typescript/vfs 生成 DTS 文件
    背景前段时间开源的STC工具,这是一个将OpenApi规范的Swagger/Apifox文档转换成代码的工具。可以在上一篇(《OpenApi(Swagger)快速转换成TypeScript代码-STC》)随笔里面查看这个工具的介绍和使用。为了支持生成Javascript,近期添加了JavaScript插件,并且生成DTS文件。实......
  • 云服务器下如何部署Flask项目详细操作步骤
    参考网上各种方案,再结合之前学过的Django部署方案,最后确定Flask总体部署是基于:centos7+nginx+uwsgi+python3+Flask之上做的。本地windows开发测试好了我的OCR项目,现在要部署我的OCR项目到云服务器上验证下。第一步:打包上传Flask项目代码到服务器指定目录下如图: 第二步:安装......
  • 【Oracle RAC Database】Single Client Access Name(SCAN)
    SCAN的作用是简化客户端连接数据库的配置,无论集群增加还是删除节点SCAN名称会一直保持不变,客户端不需要做任何的修改。SCAN是一个名称,通过DNS被解析成最多3个IP地址(SCANVIP)SCANVIP的作用是接收客户端连接,SCANVIP必须与集群的公网资源处于相同的子网,每一个SCANVIP都会有对应的S......
  • 解决虚拟上docker 启动ES访问不成功
    可能原因是ES太耗内存了,我发现启动了ES容器后,像dockerps这种命令都很慢而且查看日志发现进行垃圾回收出现错误。所以判断可能是因为ES太耗内存。采用以下命令启动容器,应该可以解决。dockerrun-id--nameelasticsearch-d--restart=always-p9200:9200-p9300:9300-v/usr......
  • 《408操作系统 》复习笔记 ② 第二章 进程与线程
    进程的概念、组成、特征程序是静态的,存放在磁盘里的可执行文件,就是一系列的指令集合进程(Process)是动态的,是程序的一次执行过程。同一个程序多次执行会对应多个进程操作系统如何区分各个进程当进程被创建时,操作系统为该进程分配一个唯一的、不重复的PIDPCB操作系统要记......
  • 使用RestTemplate 接收请求返回值中的泛型
    现有一个请求返回值的格式为:{ "success":true, "message":"", "code":200, "result":{ "returnCode":"03AD", "returnMsg":"AD3", "qrcode":"https://xxxxx......
  • 精读 classnames源码,解读重点功能的实现【玩转源码】
    前言本文主要讲解classnames相关的知识点。对classnames源码,按照功能模块进行解读。尤其对于源码中关键代码从实现层面做了解读。在总结过程中,对CSS-in-JS写法有了不同的想法,结合大佬的文章,将想法记录在了文末。classnames的原理源码目录功能模块目录结构classnames┣......
  • 《区间最值操作与历史最值问题》(吉如一)阅读笔记
    A.基础区间最值操作问题描述给定一个序列\(A\),需要支持以下操作:给定区间,将内部所有元素对\(X\)取最大值。询问区间和。解法首先,传统的线段树区间操作时间复杂度为\(\Theta(\logn)\),这是基于任何一个区间在线段树上作拆解,最终得到的所有节点个数为\(\logn\)级别。......
  • 家电制造MES系统如何实现产线设备智能运维与故障预警
    MES系统又称生产制造执行系统,拥有设备管理、质量管理、物料管理、异常管理等功能,是家电制造业实现数字化转型的重要工具。对此,数之能提供智能设备数据采集和数据转发能力的物联网平台,实现产线设备的在线监控、故障预警、智能运维等功能,助力企业自身的优化升级。 智能运维与故障预......
  • 【web_逆向09】AES加密逆向实战
    目标网站话不多说,直接干:https://www.XXXX.com/rank_m/c7/,可以联系本人微信号:wxid_ps0bm4kbsl0t22寻找加密入口查看接口数据,发现入参、出参都是经过加密的,需要加密、解密查看Initiator中,发现promise。异步通过interceptors搜索,往回找不一定能找到,可以考虑正向搜索注......