Java elasticsearch-rest-high-level-client 学习笔记1--查询

maven GVA

<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.3.2</version>
</dependency>

构建 RestHighLevelClient

    public static RestHighLevelClient getRestHighLevelClient() {
        RestClientBuilder restClientBuilder = RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")
        );

        RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);
        return client;
    }

查询流程

    RestHighLevelClient restHighLevelClient = getRestHighLevelClient();
    try {
        // 索引名
        String indexName = "blog";

        // 构建查询语句
        QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "安");

        // 构建 SearchSourceBuilder
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(queryBuilder); // 设置ES查询条件
        sourceBuilder.from(0); // 设置分页参数
        sourceBuilder.size(5);
        //sourceBuilder.sort("title.keyword", SortOrder.DESC); // 排序
        //sourceBuilder.aggregation(); // 聚合
        System.out.println(sourceBuilder.toString());

        // 构建 searchRequest
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.source(sourceBuilder);
        searchRequest.indices(indexName);

        // 执行请求
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest);

        // 遍历查询结果
        listResult(searchResponse);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (restHighLevelClient != null) {
            restHighLevelClient.close();
        }
    }

遍历结果

    public static void listResult(SearchResponse searchResponse) throws IOException {
        RestStatus status = searchResponse.status(); // ES请求状态
        if (status != RestStatus.OK) {
            System.out.println("未查询出结果");
            return;
        }
        TimeValue took = searchResponse.getTook();
        System.out.println("执行时间" + took);
        //boolean timedOut = searchResponse.isTimedOut(); // 是否超时

        // 获取hits,SearchHits对象包含搜索结果
        SearchHits hits = searchResponse.getHits();
        // 搜索结果总数
        //long numHits = hits.getTotalHits();
        // 遍历搜索结果
        SearchHit[] searchHits = hits.getHits();
        for (SearchHit hit : searchHits) {
            hit.getId();
            hit.getIndex();
            hit.getType();
            hit.getScore();

            // 获取文档内容,json字符串格式
            String sourceAsString = hit.getSourceAsString();
            System.out.println(sourceAsString);
            // 获取文档内容,Map对象格式
            //Map<String, Object> sourceAsMap = hit.getSourceAsMap();
        }
    }

查询API

match
QueryBuilders.matchAllQuery();
QueryBuilders.matchQuery("title", "安");
QueryBuilders.matchPhraseQuery("title", "安徽");
QueryBuilders.matchPhrasePrefixQuery("title", "安徽");
QueryBuilders.multiMatchQuery("安", "title", "name", "desc");
term
QueryBuilders.termQuery("title", "安");
QueryBuilders.termsQuery("title", "安", "京");
range
QueryBuilders.rangeQuery("price").gte(100).lte(200);

// 等价SQL: price >= 100 and price <= 200
RangeQueryBuilder rangeQueryBuilder = new RangeQueryBuilder("price");
rangeQueryBuilder.gte(100);
rangeQueryBuilder.lte(200);
exists
QueryBuilders.existsQuery("title");
wildcard
QueryBuilders.wildcardQuery("title", "*徽*");
bool
// 等价SQL: shop_id=100 and status=3 or (price >= 100 and price <= 300)
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
        .must(QueryBuilders.termQuery("shop_id", 100)) // 通过must设置term子查询
        .must(QueryBuilders.termQuery("status", 3)) // 通过must设置term子查询
        .should(QueryBuilders.rangeQuery("price").gte(100).lte(300)) // 通过should设置range子查询
        ;

随意组装

BoolQueryBuilder boolQueryBuilder2 = QueryBuilders.boolQuery()
        .must(QueryBuilders.rangeQuery("shop_id").gte(100).lte(300))
        .must(QueryBuilders.termQuery("name", "es"))
        .should(QueryBuilders.termQuery("title", "Hello"))
        .should(QueryBuilders.termQuery("desc", "Name"))
        .minimumShouldMatch(1)
        .mustNot(QueryBuilders.termQuery("shop_id", 100))
        .mustNot(QueryBuilders.termQuery("shop_id", 100))
        .filter(QueryBuilders.termQuery("shop_id", 100))
        .filter(boolQueryBuilder);
constant_score

不考虑得分

QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "安");
ConstantScoreQueryBuilder constantScoreQueryBuilder = QueryBuilders.constantScoreQuery(queryBuilder); // 不计算得分
// {"query":{"constant_score":{"filter":{"term":{"title":{"value":"安","boost":1.0}}},"boost":1.0}}}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值