zoukankan      html  css  js  c++  java
  • elasticsearch笔记(4) java操作es的查询_02----- match查询

    一. match查询比较智能.体现在能够根据查询的字段类型不用, 采用不同的查询方式

    • 查询的是日期或者是数组, 会把你基于字符串查询内容转为日期或数值对待
    • 查询内容是keyword类型, 则match查询不会对你指定的查询进行分词.
    • 查询的内容是text类型, 则mathc查询会根据ik分词方式分词, 去分词库中匹配指定内容.

    mathc查询的底层是多个term查询

    1.1 match_all查询

    在java中实现mathc_all查询

     1     @Test
     2     public void match_allTest() throws IOException {
     3         //        1. 创建查询对象
     4         String index = "sms-logs-index";
     5         String type = "sms-logs-type";
     6         SearchRequest searchRequest = new SearchRequest(index);//指定索引
     7         searchRequest.types(type);//指定类型
     8 //    2. 封装查询条件
     9         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    10         searchSourceBuilder.query(QueryBuilders.matchAllQuery()); searchSourceBuilder.size(20)//不指定size则只查询10条
    11         searchRequest.source(searchSourceBuilder);
    12 
    13         //        3.执行查询
    14         // client执行
    15         HttpHost httpHost = new HttpHost("192.168.43.30", 9200);
    16         RestClientBuilder restClientBuilder = RestClient.builder(httpHost);
    17         RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
    18         SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    19 //        4.获取数据(source中的数据)
    20         SearchHit[] hits = search.getHits().getHits();
    21         for (SearchHit searchHit : hits) {
    22             Map<String, Object> map = searchHit.getSourceAsMap();
    23             System.out.println(map);
    24         }
    25     }

    1.2 mathc查询

    kibana中用math查询

     java中用es查询

        public void matchTest() throws IOException {
            //        1. 创建查询对象
            String index = "sms-logs-index";
            String type = "sms-logs-type";
            SearchRequest searchRequest = new SearchRequest(index);//指定索引
            searchRequest.types(type);//指定类型
    //    2. 封装查询条件
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(20);
            searchSourceBuilder.query(QueryBuilders.matchQuery("smsContent","电话玩家活物"));
            searchRequest.source(searchSourceBuilder);
    
    
            //        3.执行查询
            // client执行
            HttpHost httpHost = new HttpHost("192.168.43.30", 9200);
            RestClientBuilder restClientBuilder = RestClient.builder(httpHost);
            RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
            SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    //        4.获取数据(source中的数据)
            SearchHit[] hits = search.getHits().getHits();
            for (SearchHit searchHit : hits) {
                Map<String, Object> map = searchHit.getSourceAsMap();
                System.out.println(map);
            }
        }

    1.3布尔match查询 : and 或 or 作为查询条件. 

    java操作es布尔match

      @Test
        public void matchBooleanTest() throws IOException {
            //        1. 创建查询对象
            String index = "sms-logs-index";
            String type = "sms-logs-type";
            SearchRequest searchRequest = new SearchRequest(index);//指定索引
            searchRequest.types(type);//指定类型
    //    2. 封装查询条件
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.size(20);
            searchSourceBuilder.query(QueryBuilders.matchQuery("smsContent", "电话玩家活物")
                                                          .operator(Operator.OR));//或者and
            searchRequest.source(searchSourceBuilder);
    
    
            //        3.执行查询
            // client执行
            HttpHost httpHost = new HttpHost("192.168.43.30", 9200);
            RestClientBuilder restClientBuilder = RestClient.builder(httpHost);
            RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
            SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    //        4.获取数据(source中的数据)
            SearchHit[] hits = search.getHits().getHits();
            for (SearchHit searchHit : hits) {
                Map<String, Object> map = searchHit.getSourceAsMap();
                System.out.println(map);
            }
        }

    1.4 多条件match查询: multi_match . 

           针对多个field条件查询: 如条件是"北京",field里可以用province和smsContent中两个field里, 只要有一个field中有ik分词器分词的条件后. 就会返回

     multiquery在java中的应用

     1     @Test
     2     public void matchMultiTest() throws IOException {
     3         //        1. 创建查询对象
     4         String index = "sms-logs-index";
     5         String type = "sms-logs-type";
     6         SearchRequest searchRequest = new SearchRequest(index);//指定索引
     7         searchRequest.types(type);//指定类型
     8 //    2. 封装查询条件
     9         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    10         searchSourceBuilder.size(20);
    11         searchSourceBuilder.query(QueryBuilders.multiMatchQuery("电话玩家活物", "province","smsContent"));
    12         searchRequest.source(searchSourceBuilder);
    13 
    14 
    15         //        3.执行查询
    16         // client执行
    17         HttpHost httpHost = new HttpHost("192.168.43.30", 9200);
    18         RestClientBuilder restClientBuilder = RestClient.builder(httpHost);
    19         RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
    20         SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    21 //        4.获取数据(source中的数据)
    22         SearchHit[] hits = search.getHits().getHits();
    23         for (SearchHit searchHit : hits) {
    24             Map<String, Object> map = searchHit.getSourceAsMap();
    25             System.out.println(map);
    26         }
    27     }
  • 相关阅读:
    C++中使用多线程
    hdu 4223 dp 求连续子序列的和的绝对值最小值
    hdu 1372 bfs 计算起点到终点的距离
    hdu 4217 线段树 依次取第几个最小值,求其sum
    心得
    hdu 1175 bfs 按要求进行搜索,是否能到达,抵消两个(相同)棋子
    hdu 4221 greed 注意范围 工作延期,使整个工作时间罚时最少的单个罚时最长的值
    hdu 2844 多重背包 多种硬币,每一种硬币有一点数量,看他能组成多少种钱
    uva LCDDisplay
    hdu 4218 模拟 根据一个圆点和半径画一个圆 注意半径要求
  • 原文地址:https://www.cnblogs.com/dangdanghepingping/p/14403727.html
Copyright © 2011-2022 走看看