Elasticsearch学习(十二)————Java查询文档(Query API)

Query API————(查询文档)

1.query ——— matchAll(查询所有)
    /**
         * @param : client
         * @description : 查询文档————matchAll
         */
        private static void searchDocumentByMatchAll(RestHighLevelClient client) throws Exception {
    
            //可以指定index,也可以不指定,不指定查所有
            SearchRequest searchRequest = new SearchRequest("my_index");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.matchAllQuery());
            searchRequest.source(searchSourceBuilder);
            //可以指定type,也可以不指定,不指定查所有
            searchRequest.types("my_type");
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            //查询信息
            RestStatus status = searchResponse.status();
            TimeValue took = searchResponse.getTook();
            Boolean terminatedEarly = searchResponse.isTerminatedEarly();
            boolean timedOut = searchResponse.isTimedOut();
    
            int totalShards = searchResponse.getTotalShards();
            int successfulShards = searchResponse.getSuccessfulShards();
            int failedShards = searchResponse.getFailedShards();
            for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
                // failures should be handled here
            }
    
            SearchHits hits = searchResponse.getHits();
            long totalHits = hits.getTotalHits();
            float maxScore = hits.getMaxScore();
    
            //匹配查询的结果集
            SearchHit[] searchHits = hits.getHits();
            for (SearchHit hit : searchHits) {
                // do something with the SearchHit
                String index = hit.getIndex();
                String type = hit.getType();
                String id = hit.getId();
                float score = hit.getScore();
    
                String sourceAsString = hit.getSourceAsString();
                Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            }
        }
2.query ——— termQuery(term查询)
      /**
         * @param : client
         * @description : 查询文档————matchQueryBuilder————term
         */
        private static void searchDocumentByTerm(RestHighLevelClient client) throws Exception {
    
            SearchRequest searchRequest = new SearchRequest();
            //可以指定多个index,也可以不指定,不指定查所有
            searchRequest.indices("my_index");
            //可以指定多个type,也可以不指定,不指定查所有
            searchRequest.types("my_type");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            //term查询
            searchSourceBuilder.query(QueryBuilders.termQuery("first_name","斌"));
            //分页:第一页;查询两条
            searchSourceBuilder.from(0);
            searchSourceBuilder.size(2);
            searchRequest.source(searchSourceBuilder);
    
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            //查询信息
            RestStatus status = searchResponse.status();
            TimeValue took = searchResponse.getTook();
            Boolean terminatedEarly = searchResponse.isTerminatedEarly();
            boolean timedOut = searchResponse.isTimedOut();
    
            int totalShards = searchResponse.getTotalShards();
            int successfulShards = searchResponse.getSuccessfulShards();
            int failedShards = searchResponse.getFailedShards();
            for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
                // failures should be handled here
            }
    
            SearchHits hits = searchResponse.getHits();
            long totalHits = hits.getTotalHits();
            float maxScore = hits.getMaxScore();
    
            //匹配查询的结果集
            SearchHit[] searchHits = hits.getHits();
            for (SearchHit hit : searchHits) {
                // do something with the SearchHit
    
                String index = hit.getIndex();
                String type = hit.getType();
                String id = hit.getId();
                float score = hit.getScore();
    
                String sourceAsString = hit.getSourceAsString();
                Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            }
        }
3.query ——— DSL
      /**
         * @param : client
         * @description : 查询文档————matchQueryBuilder————DSL
         */
        private static void searchDocumentByDsl(RestHighLevelClient client) throws Exception {
    
            SearchRequest searchRequest = new SearchRequest();
            //可以指定多个index,也可以不指定,不指定查所有
            searchRequest.indices("my_index");
            //可以指定多个type,也可以不指定,不指定查所有
            searchRequest.types("my_type");
    
    
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.from(0);
            searchSourceBuilder.size(2);
            //指定排序:score
            searchSourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
            searchSourceBuilder.timeout(new TimeValue(60,TimeUnit.SECONDS));
    
            MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder ("first_name","王志斌");
            //在匹配查询上启用模糊匹配
            matchQueryBuilder.fuzziness(Fuzziness.AUTO);
            //在匹配查询上设置前缀长度选项
            matchQueryBuilder.prefixLength(3);
            //设置最大扩展选项以控制查询的模糊过程
            matchQueryBuilder.maxExpansions(10);
    
            searchSourceBuilder.query(matchQueryBuilder);
            searchRequest.source(searchSourceBuilder);
    
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            //查询信息
            RestStatus status = searchResponse.status();
            TimeValue took = searchResponse.getTook();
            Boolean terminatedEarly = searchResponse.isTerminatedEarly();
            boolean timedOut = searchResponse.isTimedOut();
    
            int totalShards = searchResponse.getTotalShards();
            int successfulShards = searchResponse.getSuccessfulShards();
            int failedShards = searchResponse.getFailedShards();
            for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
                // failures should be handled here
            }
    
            SearchHits hits = searchResponse.getHits();
            long totalHits = hits.getTotalHits();
            float maxScore = hits.getMaxScore();
    
            //匹配查询的结果集
            SearchHit[] searchHits = hits.getHits();
            for (SearchHit hit : searchHits) {
                // do something with the SearchHit
    
                String index = hit.getIndex();
                String type = hit.getType();
                String id = hit.getId();
                float score = hit.getScore();
    
                String sourceAsString = hit.getSourceAsString();
                Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            }
        }
4.query ———HighLight(高亮显示)
    /**
         * @param : client
         * @description : 查询文档————HighLight(高亮显示)
         */
        private static void searchDocumentByHighLight(RestHighLevelClient client) throws Exception {
    
            SearchRequest searchRequest = new SearchRequest();
            //可以指定多个index,也可以不指定,不指定查所有
            searchRequest.indices("my_index");
            //可以指定多个type,也可以不指定,不指定查所有
            searchRequest.types("my_type");
    
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            //term查询
            searchSourceBuilder.query(QueryBuilders.termQuery("first_name","斌"));
            searchSourceBuilder.from(0);
            searchSourceBuilder.size(2);
            //指定排序:score
            searchSourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
            searchSourceBuilder.timeout(new TimeValue(60,TimeUnit.SECONDS));
    
            HighlightBuilder highlightBuilder = new HighlightBuilder ();
            //高亮字段
            HighlightBuilder.Field firstNameField =new HighlightBuilder.Field("first_name");
            //高亮类型:unified, plain和fvh
            firstNameField.highlighterType("unified");
            //高亮前缀
            highlightBuilder.preTags("<em>");
            //高亮后缀
            highlightBuilder.postTags("</em>");
    
            highlightBuilder.field(firstNameField);
    
            searchSourceBuilder.highlighter(highlightBuilder);
            searchRequest.source(searchSourceBuilder);
    
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            //查询信息
            RestStatus status = searchResponse.status();
            TimeValue took = searchResponse.getTook();
            Boolean terminatedEarly = searchResponse.isTerminatedEarly();
            boolean timedOut = searchResponse.isTimedOut();
    
            int totalShards = searchResponse.getTotalShards();
            int successfulShards = searchResponse.getSuccessfulShards();
            int failedShards = searchResponse.getFailedShards();
            for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
                // failures should be handled here
            }
    
            SearchHits hits = searchResponse.getHits();
            long totalHits = hits.getTotalHits();
            float maxScore = hits.getMaxScore();
    
            //匹配查询的结果集
            SearchHit[] searchHits = hits.getHits();
            for (SearchHit hit : searchHits) {
                // do something with the SearchHit
    
                String index = hit.getIndex();
                String type = hit.getType();
                String id = hit.getId();
                float score = hit.getScore();
    
                //高亮字段
                Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                System.out.println(highlightFields.toString());
    
    
                String sourceAsString = hit.getSourceAsString();
                Map<String, Object> sourceAsMap = hit.getSourceAsMap();
                System.out.println(sourceAsString);
                System.out.println(sourceAsMap);
            }
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值