广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JavaES(Elasticsearch)中的and和or查询
  • 911
分享到

JavaES(Elasticsearch)中的and和or查询

ESandor查询ES查询 2022-11-13 19:11:05 911人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数

elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

//跨索引查询

SearchRequest request = new SearchRequest(index1,index2);

在es中想实现类似于下面的查询,废话不多说,es的should查询代替的是or,但是必须搭配must来使用

select * from table where (a != 1 and b != 1) or (startTime> “2022-05-20” and (a == 1 or b == 1)) 

直接上代码

@Autowired
    private RestHighLevelClient client;
 public List<Map<String,Object>> searchList(String index1,String index2,Map<String,Object> paramMap
            ,String time,int page,int size) {
        List<Map<String,Object>> hitList = new ArrayList();
        try {
            //搜索请求
            SearchRequest request = new SearchRequest(index1,index2);
            //请求条件构建器,这里和mybatis中的自定义查询有点类型
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

            //等于条件(其他的一些条件)
            if (paramMap != null && !paramMap.isEmpty()) {
                paramMap.forEach((k, v) -> {
                    boolQueryBuilder.must(QueryBuilders.termsQuery(k + KEYWord, v));
                });
            }
                BoolQueryBuilder query1 = QueryBuilders.boolQuery();
                query1.mustNot(QueryBuilders.termsQuery("a" + ".keyword", "1"));
                query1.mustNot(QueryBuilders.termsQuery("b" + ".keyword", "1"));

                BoolQueryBuilder query2 = QueryBuilders.boolQuery();
                //时间范围查询
                if (StringUtils.isNotBlank(time)) {
                    query2.must(QueryBuilders.rangeQuery("startTime"+KEYWORD).from(time));
                }

                BoolQueryBuilder shouldQuery = QueryBuilders.boolQuery();
                shouldQuery.should(QueryBuilders.wildcardQuery("a" , "1"));
                shouldQuery.should(QueryBuilders.wildcardQuery("b" , "1"));
                query2.must(shouldQuery);

                BoolQueryBuilder query3 = QueryBuilders.boolQuery();
                query3.should(query1);
                query3.should(query2);
                boolQueryBuilder.must(query3);

            //把查询添加放入请求中
            sourceBuilder.query(boolQueryBuilder);
            request.source(sourceBuilder);
            //起始位置
            sourceBuilder.from((page - 1) * size);
            //查询数量
            sourceBuilder.size(size);
            sourceBuilder.trackTotalHits(true);
            //建立SearchResponse
            SearchResponse response;

            response = client.search(request, RequestOptions.DEFAULT);
            //封装查询的信息
            for (SearchHit hit : response.getHits().getHits()) {
                hitList.add(hit.getSourceAsMap());
                log.debug("查询结果:{}", hit.getSourceAsString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return hitList;
    }

将每一块拆成一个BoolQueryBuilder ,最后or用should()拼接起来

ElasticSearch(es) match or,and查询

es中match查询中,查询字符串分词后,默认是or或者的关系。

语法

operator:用来控制match查询匹配词条的逻辑条件,默认值是or,如果设置为and,表示查询满足所有条件

minimum_should_match:当operator参数设置为or时,该参数用来控制应该匹配的分词的最少数量。

当参数operator使用默认值时,参数minimum_should_match设置每个子查询应该匹配多少个分词,默认值是1,例如,设置minimum_should_match为1,那么搜索的字段中至少含有一个分词。

match or实例

GET /bank/_search
{
  "from":1,
  "size":5,
  "query": {
    "match": {
      "smsContent": {
        "query": "java 学习",
        "operator": "or" //或者关系
        "minimum_should_match": 2
      }
    }
  }
}

smsContent中包含java或者学习的内容,minimum_should_match等于2表示这2个分词在内容中必须大于2次

match and实例

GET /bank/_search
{
  "query": {
    "match": {
      "smsContent": {
        "query": "java 学习",
        "operator": "and" //并且关系
      }
    }
  }
}

到此这篇关于ES 中的and 和 or 查询的文章就介绍到这了,更多相关ES 中的and 和 or 查询内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaES(Elasticsearch)中的and和or查询

本文链接: https://www.lsjlt.com/news/171028.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaES(Elasticsearch)中的and和or查询
    Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数...
    99+
    2022-11-13
    ES and or 查询 ES 查询
  • mybatis and和or的组合查询
    在mybatis中涉及到和、或者的查询需要注意,一招不慎,会导致查询出来的结果不准确。 究其原因,是and优先级高于or。凡是查询中涉及到or,需要将or 条件和与之并肩查询的条件用括号括起来。 来看错误的写法: select ...
    99+
    2023-09-05
    mybatis java mysql
  • mysql联合查询中and和or的使用
    这篇文章主要讲解了“mysql联合查询中and和or的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql联合查询中and和or的使用”吧! 需求...
    99+
    2022-10-18
  • MySQ中and和or查询的优先级是什么
    这篇文章给大家分享的是有关MySQ中and和or查询的优先级是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这个可能是容易被忽略的问题,首选我们要清楚:MySQL中,AND的执行优先级高于OR。也就是说,在没...
    99+
    2023-06-14
  • MySQL中 and or 查询的优先级分析
    这个可能是容易被忽略的问题,首选我们要清楚: MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号()的限制下,总是优先执行AND语句,再执行OR语句。 比如: select * from ...
    99+
    2022-05-15
    MySQL and mysql or 查询
  • mybatis如何使用Criteria的and和or进行联合查询
    目录Criteria的and和or进行联合查询使用criteria 查询xx and ( xx or xx)形式的sqlCriteria的and和or进行联合查询 DemoExa...
    99+
    2022-11-12
  • Jpa Specification如何实现and和or同时使用查询
    目录同时使用and和or的查询JPA 动态查询之AND、OR结合使用问题描述代码示例同时使用and和or的查询 UserServiceImpl 类,service实现类 impo...
    99+
    2022-11-12
  • Jpa Specification怎么实现and和or同时使用查询
    这篇文章主要为大家展示了“Jpa Specification怎么实现and和or同时使用查询”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Jpa Specification怎...
    99+
    2023-06-25
  • python 中的or 和 and
        在看到python源码的时候,有一句关于or的用法,当时很疑惑,以前一直认为其用法类似与java中的"&&" 和 "||" ,返回的是boolean类型,结果当前是错误的,下面给大家分享一下python中的and和o...
    99+
    2023-01-31
    python
  • SQL查询中between and和and的区别是什么
    在SQL查询中,"between and"和"and"是两种不同的语法结构,具有不同的用途和效果。1. "between and":...
    99+
    2023-08-19
    SQL
  • 如何使用mysql条件查询and和or及其优先级
    小编这次要给大家分享的是如何使用mysql条件查询and和or及其优先级,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。mysql and与or介绍AND 和 OR 可...
    99+
    2022-10-18
  • 关于SQL查询的between and和两个and连接查询的区别
    between and在SQL查询中是用来指定一个范围的条件。它可以在查询中使用两个值之间的范围来筛选结果。例如,以下查询将返回在2...
    99+
    2023-08-19
    SQL
  • Mybatis Criteria使用and和or进行联合条件查询的操作方法
    之前用Mybatis框架反向的实体,还有实体里面的Example,之前只是知道Example里面放的是条件查询的方法,可以一直不知道怎么用,到今天才开始知道怎么简单的用。在我们前台查...
    99+
    2022-11-12
  • 如何解析elasticsearch中的DSL查询
    这期内容当中小编将会给大家带来有关如何解析elasticsearch中的DSL查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。ES提供了基于JSON的完整查询DSL,它由两种子句组成 ##1.查询分类 ...
    99+
    2023-06-19
  • 无意学会了python中and和or的有
        今天看书,无意中看到了Python的and和or的一个有趣用法,最后在网上查找这种用法的机制,归根结底还是要仔细理解python中and和or的机制。Python中if-else有多种写法。假设a=10,b=20,取较大者。最常规的...
    99+
    2023-01-31
    学会了 python
  • MyBatis中criteria的or(或查询)语法说明
    目录MyBatis criteria的or(或查询)语法example/criteria and or 查询MyBatis criteria的or(或查询)语法 其中 TInn...
    99+
    2022-11-12
  • sql中and和or连用的方法是什么
    在SQL中,我们可以使用AND和OR运算符来连接多个条件。这两个运算符用于组合多个条件,以便生成更复杂的查询条件。以下是使用AND和...
    99+
    2023-08-31
    sql
  • Mybatis-Plus中and()和or()的使用与原理详解
    目录一. 简单无优先级连接(即无括号的sql语句)1. 与连接 and()2. 或连接 or()二. 复杂有优先级的的连接补充:MybatisPlus中and和or的组合使用总结一....
    99+
    2022-11-13
  • Mybatis-Plus中的and()和or()的使用与原理介绍
    一. 简单无优先级连接(即无括号的sql语句) 简单来说,两个子条件间默认and与连接,若两个之间显式写出or()则or或连接. 与连接 and() 当需要简单的将两个条件与连接,则最直接的写法为: QueryWrapper queryW...
    99+
    2023-08-31
    mybatis java mysql
  • python中and和or逻辑运算符的用法示例
    目录一、概述二、用法说明(一)and 用法(二)or 用法三、两个集合and 和or操作的时候的问题四、优先级问题(and > or)附:python中if语句and和or用法...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作