• ES-- match查询


    @

    2.2、match查询

    match查询属于高层查询,会根据你查询的字段的类型不一致,采用不同的查询方式。

    • 如果查询的是日期或者数值的字段,他会自动将你的字符串查询内容转换成日期或者数值对待;
    • 如果查询的内容是一个不能被分词的字段(keyword).match查询不会对你的指定查询关键字进行分词;
    • 如果查询的内容是一个可以分词的字段(text),match会将你指定的查询内容根据一定的方式去分词,然后去分词库中匹配指定的内容。

    总而言之:match查询,实际底层就是多个term查询,将多个term查询的结果汇集到一起返回给你。

    2.2.1、match_all

    参考官网 Elasticsearch Reference [7.10] » Query DSL » Match all query

    2.2.1.1、命令行

    查询全部内容,所有的_socre都是1.0

    GET /sms-logs-index/_search
    {
      "query": {
        "match_all": {}
      }
    }
    

    在这里插入图片描述

    2.2.1.2、java代码

        @Test
        public void matchAllQuery() throws IOException {
            //1、创建SearchRequest对象
            SearchRequest searchRequest = new SearchRequest();
    
            //2、指定查询条件
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(20); // ES 默认只查询10条,如果想查询更多,添加size()
            searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    
            // 3、将条件封装到Request对象中
            searchRequest.source(searchSourceBuilder);
    
            // 4、执行查询
            SearchResponse resp = client.search(searchRequest, RequestOptions.DEFAULT);
    
            // 5、打印结果
            for (SearchHit hit : resp.getHits().getHits()) {
                System.out.println(hit.getSourceAsMap());
            }
    
            // 打印条数
            System.out.println(resp.getHits().getHits().length);
    
        }
    

    在这里插入图片描述

    2.2.2、match

    2.2.2.1、命令行

    POST /sms-logs-index/_search
    {
      "query": {
          "match": {
            "smsContent": "魅力宣传"
          }
      }
    }
    

    2.2.2.2、java 代码

    smsContent 是一个 text,可以进行分词
    在这里插入图片描述

    2.2.3、布尔match

    拥有match查询的特性,同时可以基于一个field匹配内容,采用and或者or的方式

    2.2.3.1、命令行

    POST /sms-logs-index/_search
    {
      "query": {
          "match": {
            "smsContent": {
              "query": "魅力 宣传",
              "operator": "or"
            }
          }
      }
    }
    
    POST /sms-logs-index/_search
    {
      "query": {
          "match": {
            "smsContent": {
              "query": "魅力 宣传",
              "operator": "and"
            }
          }
      }
    }
    

    2.2.3.2、java 代码

        @Test
        public void matchBoolQuery() throws IOException {
            //1、创建SearchRequest对象
            SearchRequest searchRequest = new SearchRequest();
    
            //2、指定查询条件
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(20); // ES 默认只查询10条,如果想查询更多,添加size()
    
            // searchSourceBuilder.query(QueryBuilders.matchAllQuery());
            searchSourceBuilder.query(QueryBuilders.matchQuery("smsContent", "魅力 宣传").operator(Operator.AND));
    
            // 3、将条件封装到Request对象中
            searchRequest.source(searchSourceBuilder);
    
            // 4、执行查询
            SearchResponse resp = client.search(searchRequest, RequestOptions.DEFAULT);
    
            // 5、打印结果
            for (SearchHit hit : resp.getHits().getHits()) {
                System.out.println(hit.getSourceAsMap());
            }
    
            // 打印条数
            System.out.println(resp.getHits().getHits().length);
    
        }
    

    2.2.4、multiMatch

    拥有match的特性,multi_match针对多个field进行检索,多个field对应一个查询的关键字;

    2.2.4.1、命令行

    实现要求,查询包含北京的字段province或者字段smsContent。

    POST /sms-logs-index/_search
    {
      "query": {
          "multi_match": {
            "query": "北京",
            "fields": ["province", "smsContent"]
          }
      }
    }
     
    

    2.2.4.2、java 代码

            // searchSourceBuilder.query(QueryBuilders.matchAllQuery());
            searchSourceBuilder.query(QueryBuilders.multiMatchQuery("北京", "province", "smsContent"));
    

    关注我的公众号【宝哥大数据】,更多干货

    在这里插入图片描述

  • 相关阅读:
    python学习笔记(2)--sublimeText3运行python
    python学习笔记(1)--遍历txt文件,正则匹配替换文字
    JS学习笔记(4)--js变量的生命周期
    JS学习笔记(3)--json格式数据的添加,删除及排序方法
    JS学习笔记(2)--正则表达式获取指定字符串
    JS学习笔记(1)--sort排序
    VBA学习笔记(1)----VBA对象属性方法
    能够作图的软件都有哪些
    怎么用ChemDraw连接两个结构片段
    在几何画板上画椭圆可以根据椭圆第二定义
  • 原文地址:https://www.cnblogs.com/chengbao/p/14975202.html
Copyright © 2020-2023  润新知