• RestHighLevelClient查询ElasticSearch


    是一个分页查询

        /**
         * 查询
         * @param keyword
         * @param pageNo
         * @param pageSize
         * @return
         * @throws IOException
         */
        public List<Map<String ,Object>> searchPage(String keyword, int pageNo, int pageSize) throws IOException {
    //        指定要查询的索引
            SearchRequest searchRequest = new SearchRequest("phone_info");
    
    //        设置分页条件
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            pageNo = pageNo == 0 ? 1 : pageNo;
            pageSize = pageSize == 0 ? 10 : pageSize;
            searchSourceBuilder.from(pageNo);
            searchSourceBuilder.size(pageSize);
    
    //        输入的关键字匹配的字段
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title.keyword", keyword);
            searchSourceBuilder.query(termQueryBuilder);
            searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
    
    //        执行
            searchRequest.source(searchSourceBuilder);
            SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    
            ArrayList<Map<String,Object>> list = new ArrayList<>();
    
            if (search.getHits().getHits().length!=0){
                for (SearchHit documentFields : search.getHits().getHits()) {
                    list.add(documentFields.getSourceAsMap());
                }
                return list;
            }else {
                HashMap<String, Object> map = new HashMap<>();
                map.put("code",404);
                map.put("msg","没有相关数据");
                list.add(map);
                return list;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    其实前面的都差不多,最大的不同的地方在QueryBuilders调用的方法。

    1. termQuery(字段.keyword,"value"):单条件精确查询。
    2. termsQuery(字段.keyword,"value1","value2","..."):多条件精确查询,取并集。
    3. rangeQuery("字段").from("start").to("end"); 范围查询,查询指定字段处于start到end范围的值,闭区间(不包括start、end)。
    4. rangeQuery("字段").from("start", false).to("end", false); 开区间范围查询。
    5. rangeQuery("字段").lt("value"); 小于value的值,小于等于是lte、大于是gt、大于等于是gte
    6. 组合多条件查询,将上面的可以进行组合,使用:must必须、mustNot必须不、should类似于or进行连接。
    7. wildcardQuery("字段","*value*"):模糊查询,支持通配符。
    8. queryStringQuery("value").field("字段");不使用通配符的模糊查询,左右匹配。
    9. multiMatchQuery("字段","value1","value2"):多字段模糊查询
  • 相关阅读:
    Java lamda Stream
    java动态绑定的一点注意
    javascript的一点学习
    阶段总结
    some notes about spring aop
    java 命令notes
    Guava cache
    位运算
    解析JDK 7的动态类型语言支持
    Maven里面多环境下的属性过滤(配置)
  • 原文地址:https://www.cnblogs.com/huoqm/p/14338369.html
Copyright © 2020-2023  润新知