对elasticsearch的实际应用

文章讲述了如何设计一个支持多维度筛选的搜索接口,涉及千万级数据的处理。关键点包括设置学段、学科等筛选项,处理旧模块与新模块标签映射,以及在Elasticsearch中利用BoolQuery进行复杂查询逻辑,如should和must的关系处理,避免空should条件的问题。

有业务需求,要做一个搜索接口,从千万的数据中根据筛选项查到需要的数据
筛选项有
1.学段。高中,初中等
2.学科。数学,语文等
3.专区。同步专区,高考专区等
4.试卷类型。月考卷,期中考试卷等
5.年级。高一,高二等
6.年份。
7.地区。
8.文档类型。doc,zip,pdf等
9.范围。
10.是否解析。
在这里插入图片描述
做的模块是新模块,叫试卷大全,旧模块叫优选卷库和名校试卷。试卷大全中需要包含这两个旧模块的数据。因此,需要做旧模块的标签和新模块的标签映射关系。
映射关系中,包括年级、旧标签、关键字(根据关键字去名称中查询),排除关键字(名称中有排除关键字的就去除掉)。根据这四个去查询老数据。
规则是:旧标签和关键字的查询是一个或的关系,排除关键字在整个查询老数据的逻辑里生效(即包含排除关键字的资源均去除)。
下面是搜索老数据的逻辑
在这里插入图片描述

两个tips
1.用should去查询的时候,should里面一定不能包含一个空should条件,否则这个should查询会一直生效
比如BoolQueryBuilder shouldQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
如果shouldQueryBuilder.should(queryBuilder);但是queryBuilder里面没有任何查询条件,那shouldQueryBuilder会一直生效。
2.想should查询1和should查询2是一个must查询的关系(或者说一个must查询中包两个should查询),需要先弄一个BoolQueryBuilder mustQueryBuilder = QueryBuilders.boolQuery();然后mustQueryBuilder.must(“should查询1”);mustQueryBuilder.must(“should查询2”);

### Elasticsearch 实际应用案例 Elasticsearch 是一个基于 Lucene 的搜索服务器,不仅提供全文搜索能力,还具备结构化搜索、数据分析等功能,并能将这些功能融合在一个分布式的环境中运行。这使得它非常适合处理大规模的数据集并实现实时的搜索需求[^2]。 #### 订单管理系统中的应用实例 在电商领域,如京东到家这样的平台利用了 Elasticsearch 来管理其庞大的订单数据库。该系统的 ES 集群已经能够容纳超过十亿份文档记录,并且每天要响应高达五亿次以上的查询请求。这种高效性能确保了即使面对海量交易信息也能迅速定位所需资料,从而提高了用户体验和服务质量[^4]。 #### 日志管理和监控系统 除了商业交易平台外,许多企业也会采用 Elasticsearch 构建自己的日志收集与分析解决方案。通过对应用程序产生的各类事件日志进行集中式存储和检索,可以帮助运维团队更快地诊断问题所在,优化资源分配策略,甚至预测潜在风险趋势。例如,当遇到异常情况时,管理员可以通过简单的关键词匹配快速找到相关联的日志片段来进行排查工作[^3]。 ```java // 示例:向Elasticsearch索引新增或更新文档 RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); IndexRequest request = new IndexRequest("logs"); request.id("log_1"); // 设置唯一标识符 Map<String, Object> jsonMap = new HashMap<>(); jsonMap.put("timestamp", Instant.now()); jsonMap.put("message", "Application started successfully."); request.source(jsonMap); client.index(request, RequestOptions.DEFAULT); ``` 上述代码展示了如何使用 Java 客户端 API 向名为 `logs` 的索引中添加新的日志条目。此过程涉及创建 RESTful 请求对象并将 JSON 格式的文档发送给指定的目标地址[^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值