Elasticsearch文档Java 查找API

一、精确查找一个

    @Test
    public void testQueryOne() throws IOException {
        GetRequest getRequest = new GetRequest(INDEX_NAME, "14454339374");
        GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
        String sourceAsString = documentFields.getSourceAsString();
        log.info("获取到的对象:{}", sourceAsString);
    }

二、查找符合条件的多个

    @Test
    public void testQueryWithCondition() throws IOException {
        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        searchRequest.source().query(QueryBuilders.matchQuery("name", "小米"));
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
    }

三、查找全部

    @Test
    public void testQueryAll() throws IOException {
        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        searchRequest.source().query(QueryBuilders.matchAllQuery());
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
    }

四、复杂查找

    @Test
    public void testQueryWithCondition2() throws IOException {
        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.must(QueryBuilders.termQuery("brand", "小米"))
                .filter(QueryBuilders.rangeQuery("price").gte(5000))
                .mustNot(QueryBuilders.matchQuery("name", "小米8"));
        searchRequest.source().query(boolQueryBuilder);
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

    }

五、分页查找

    @Test
    public void testQueryByPage() throws IOException {
        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.must(QueryBuilders.termQuery("brand", "小米"))
                .filter(QueryBuilders.rangeQuery("price").gte(5000))
                .mustNot(QueryBuilders.matchQuery("name", "小米8"));
        searchRequest.source().query(boolQueryBuilder).from(0).size(10);
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
    }

六、高亮查找

        request.source()
                .query(boolQueryBuilder)
                .highlighter()
                .field("name")
                .preTags("<font style='color:red'>")
                .postTags("</font>");

七、算分查询

    @Test
    public void testAddScore() throws IOException {
        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.must(QueryBuilders.termQuery("brand", "小米"))
                        .filter(QueryBuilders.matchQuery("name", "小米 三星"));


        FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(
                boolQueryBuilder,
                new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
                        new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                                QueryBuilders.matchQuery("name", "小米"),
                                ScoreFunctionBuilders.weightFactorFunction(10)
                        )
                }
        ).boostMode(CombineFunction.SUM);
        searchRequest.source().query(functionScoreQueryBuilder);
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
        handleResponse(response);
    }

10.聚合查询 查找某一属性的统计

    @Test
    public void testTerm() throws IOException {

        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        searchRequest.source().aggregation(AggregationBuilders.terms("brand_agg").field("brand"));
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

        Terms brandAgg = response.getAggregations().get("brand_agg");
        List<? extends Terms.Bucket> buckets = brandAgg.getBuckets();
        for (Terms.Bucket bucket : buckets) {
            String keyAsString = bucket.getKeyAsString();
            long docCount = bucket.getDocCount();
            log.info("品牌:{},数量:{}", keyAsString, docCount);
        }
    }
posted @   超级大菠萝面包  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示