zoukankan      html  css  js  c++  java
  • Java API 整合 ES Query

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/15213533.html

    Maven Dependency

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.fool</groupId>
        <artifactId>helloes</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>7.13.4</version>
            </dependency>
    
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>7.13.4</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.14.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.14.1</version>
            </dependency>
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.12.5</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.20</version>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    
    </project>

    全量查询

    ESDocQueryAll.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryAll {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> System.out.println(p.getSourceAsString()));
    
            client.close();
        }
    }

    Console Output

    Term 查询

    ESDocQueryTerm.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryTerm {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age", "40")));
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> System.out.println(p.getSourceAsString()));
    
            client.close();
        }
    }

    Console Output

    分页查询

    ESDocQueryPagination.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryPagination {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
            builder.from(0);
            builder.size(3);
            searchRequest.source(builder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> System.out.println(p.getSourceAsString()));
    
            client.close();
        }
    }

    Console Output

    数据排序

    ESDocQuerySort.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    import org.elasticsearch.search.sort.SortOrder;
    
    import java.io.IOException;
    
    public class ESDocQuerySort {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
            builder.sort("age", SortOrder.DESC);
            searchRequest.source(builder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> System.out.println(p.getSourceAsString()));
    
            client.close();
        }
    }

    Console Output

    数据过滤

    ESDocQueryFilter.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryFilter {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
    
            String[] includes = {"name"};
            String[] excludes = {};
            builder.fetchSource(includes, excludes);
    
            searchRequest.source(builder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> System.out.println(p.getSourceAsString()));
    
            client.close();
        }
    }

    Console Output

    Bool 查询

    ESDocQueryCombination.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.BoolQueryBuilder;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryCombination {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    
            // and
            // boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
            // boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "female"));
    
            // or
            boolQueryBuilder.should(QueryBuilders.matchQuery("age", 30));
            boolQueryBuilder.should(QueryBuilders.matchQuery("age", 40));
    
            searchSourceBuilder.query(boolQueryBuilder);
            searchRequest.source(searchSourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> System.out.println(p.getSourceAsString()));
    
            client.close();
        }
    }

    Console Output

    范围查询

    ESDocQueryRange.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.index.query.RangeQueryBuilder;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryRange {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
    
            rangeQueryBuilder.gte(30);
            rangeQueryBuilder.lte(50);
    
            searchSourceBuilder.query(rangeQueryBuilder);
            searchRequest.source(searchSourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> System.out.println(p.getSourceAsString()));
    
            client.close();
        }
    }

    Console Output

    模糊查询

    ESDocQueryFuzzy.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.common.unit.Fuzziness;
    import org.elasticsearch.index.query.FuzzyQueryBuilder;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.index.query.RangeQueryBuilder;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryFuzzy {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("name", "caocao").fuzziness(Fuzziness.ONE);
    
            searchSourceBuilder.query(fuzzyQueryBuilder);
            searchRequest.source(searchSourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> System.out.println(p.getSourceAsString()));
    
            client.close();
        }
    }

    Console Output

    高亮查询

    ESDocQueryHighlight.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.index.query.TermQueryBuilder;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryHighlight {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "caocao");
    
            HighlightBuilder highlightBuilder = new HighlightBuilder();
            highlightBuilder.preTags("<font color='red'>");
            highlightBuilder.postTags("</font>");
            highlightBuilder.field("name");
    
            searchSourceBuilder.highlighter(highlightBuilder);
            searchSourceBuilder.query(termQueryBuilder);
            searchRequest.source(searchSourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse.getTook());
    
            SearchHits hits = searchResponse.getHits();
            System.out.println(hits.getTotalHits());
            hits.forEach(p -> {
                System.out.println(p.getSourceAsString());
                System.out.println(p.getHighlightFields());
            });
    
            client.close();
        }
    }

    Console Output

    聚合查询

    ESDocQueryAggregation.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.search.aggregations.AggregationBuilders;
    import org.elasticsearch.search.aggregations.Aggregations;
    import org.elasticsearch.search.aggregations.metrics.MaxAggregationBuilder;
    import org.elasticsearch.search.aggregations.metrics.ParsedMax;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    
    public class ESDocQueryAggregation {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    
            MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("maxAge").field("age");
    
            searchSourceBuilder.aggregation(maxAggregationBuilder);
    
            searchRequest.source(searchSourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(searchResponse);
    
            Aggregations aggregations = searchResponse.getAggregations();
            ParsedMax terms = aggregations.get("maxAge");
            System.out.println(terms.getValue());
    
            client.close();
        }
    }

    Console Output

    分组统计

    ESDocQueryGroup.java

    package org.fool.es.test;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.search.aggregations.AggregationBuilders;
    import org.elasticsearch.search.aggregations.Aggregations;
    import org.elasticsearch.search.aggregations.bucket.terms.ParsedLongTerms;
    import org.elasticsearch.search.aggregations.bucket.terms.Terms;
    import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    
    import java.io.IOException;
    import java.util.List;
    
    public class ESDocQueryGroup {
        public static void main(String[] args) throws IOException {
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
            );
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("user");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    
            TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
    
            searchSourceBuilder.aggregation(termsAggregationBuilder);
    
            searchRequest.source(searchSourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    
            Aggregations aggregations = searchResponse.getAggregations();
            ParsedLongTerms terms = aggregations.get("ageGroup");
            List<? extends Terms.Bucket> buckets = terms.getBuckets();
            for (Terms.Bucket bucket : buckets) {
                System.out.println(bucket.getKey() + ":" + bucket.getDocCount());
            }
    
            client.close();
        }
    }

    Console Output


    欢迎点赞关注和收藏

    强者自救 圣者渡人
  • 相关阅读:
    年龄大的普通程序员最后的出路是哪里?
    PHP7数组的底层实现
    MySQL mysqldump数据导出详解
    swoole高性能赛事直播平台(笔记)
    防止图片盗链和资源恶意下载
    由Response.Redirect引发的"Thread was being aborted. "异常
    关于前台调用后台事件__doPostBack函数
    页面拖拽效果
    bs和cs缩放图片
    hideFocus(小技巧)
  • 原文地址:https://www.cnblogs.com/agilestyle/p/15213533.html
Copyright © 2011-2022 走看看