【ElasticSearch实战】——ES常用查询条件与mysql对比

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 【ElasticSearch实战】——ES常用查询条件与mysql对比

类比mysql,我们需要=、>、>=、<、<= 、or、and、in、like、count、sum、group by、order by、limit

在高版本的ES里面使用了boolquery替换了filter

1、等于号=

QueryBuilders.termQuery("isDel",1));
//termQuery相当于=,相当于isDel=1


2、大于小于号


QueryBuilders.rangeQuery("overdueStartTime").lte(startDate.getTime())
//rangeQuery 
//lte   <=
//lt    <
//gte   >=
//gt    >

3、or、and

boolQueryBuilder.must(QueryBuilders.termQuery("isDel",req.getIs_del()));
//must相当于and
caseStatusQuery.should(QueryBuilders.termQuery("caseStatus",s));
//should相当于or

4、in

QueryBuilders.termsQuery("clientCompanyId",req.getClientCompanyIdList())
//termQuery相当于in,可以传递list

5、like

QueryBuilders.wildcardQuery("phone1", "*" + req.getTelephone() + "*")
//wildcard 正则匹配
QueryBuilders.matchPhraseQuery("debtorName", req.getDebtor_name())
//matchPhrase 不会分词,直接匹配有完整相关短语的记录

6、sum&&count


AggregationBuilder debtTotalSum = AggregationBuilders.sum(DEBT_TOTAL_SUM_KEY).field("debtTotal");
AggregationBuilder debtTotalCount = AggregationBuilders.count(DEBT_TOTAL_COUNT_KEY).field("debtTotal");


7、order by and limit

SearchResponse searchResponse = client.prepareSearch(ElasticSearchUtil.getIndexName())
                .setTypes(ElasticSearchUtil.TYPE_NAME)
                .setQuery(boolQueryBuilder)
                        //指定查询字段
                .addStoredField("id")
                .addSort(order, sortOrder)
                        //分页
                .setFrom((currentPage - 1) * limit).setSize(limit)
                .execute()
                .actionGet();

8、批量插入

public  void batchInsert(List<CaseTable> list,Client client) {
        LOGGER.info("---------案件批量插入索引开始--------");
        BulkRequestBuilder bulkRequest = client.prepareBulk();
        long start = System.currentTimeMillis();
        BulkRequestBuilder delRequest = client.prepareBulk();
        for (CaseTable caseTable :list){
            IndexRequestBuilder ir = client.prepareIndex()
                    .setIndex(ElasticSearchUtil.INDEX_NAME_CASE)
                    .setType(ElasticSearchUtil.TYPE_NAME_CASE)
                    .setId(caseTable.getId().toString())
                    .setSource(JSON.toJSONString(caseTable));
            bulkRequest.add(ir);
        start = System.currentTimeMillis();
        BulkResponse bulkResponse = bulkRequest.execute().actionGet();
        LOGGER.info("案件批量插入循环所用时间 search time:{}ms", System.currentTimeMillis() - start);
        if (!bulkResponse.hasFailures()) {
            LOGGER.info("----------案件批量插入成功一轮------------");
        }
    }


9、。。。。后续会继续更新

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
3月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
267 66
|
3月前
|
搜索推荐 关系型数据库 MySQL
MySQL中的模糊匹配技巧:无需ES的高效实现
在数据库应用中,模糊匹配是一个常见的需求,尤其在处理搜索功能时。虽然Elasticsearch(ES)等搜索引擎在处理文本搜索方面表现出色,但在一些场景下,直接使用MySQL数据库实现模糊匹配也是一个经济且高效的选择。本文将分享如何在不引入ES的情况下,利用MySQL实现模糊匹配的五大步骤和十个实战案例。
232 1
|
3月前
|
自然语言处理 监控 关系型数据库
MySQL模糊匹配技巧:无需ES的高效实现
在数据库应用中,模糊匹配是一个常见的需求,尤其是在不引入Elasticsearch(ES)等外部搜索引擎的情况下。MySQL作为强大的关系型数据库,提供了多种实现模糊匹配的方法。本文将分享如何在MySQL中实现模糊匹配,并提供五大步骤和十个实战案例,帮助你提升查询效率和性能。
377 1
|
3月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
512 1
|
4月前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
165 5
|
4月前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
169 1
|
4月前
|
关系型数据库 MySQL API
MySQL 历史数据迁移到 Elasticsearch
MySQL 历史数据迁移到 Elasticsearch
153 4
|
3月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
296 0
|
4月前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
275 0
|
8天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决