Elasticsearch(六) java代码操作Es进行高级查询match、match_all

  • Post author:
  • Post category:java


Es在查询时其主要步骤如下:

1,构建SearchRequest请求对象,指定索引库,
2,构建SearchSourceBuilder查询对象
3,构建QueryBuilder对象指定查询方式和查询条件
4,将QuseryBuilder对象设置到SearchSourceBuilder对象中
5,将SearchSourceBuilder设置到SearchRequest中
6,调用方法查询数据
7,解析返回结果

代码如下:

package com.xiaohui;

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.MatchAllQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.query.QuerySearchRequest;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;

public class ESTest2 {



    private RestHighLevelClient client;

    @BeforeEach
    public void getClient(){
        client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.0.122", 9200, "http")));
    }


    @Test
    public void matchDoc(){
        //1,构建SearchRequest请求对象,指定索引库
        SearchRequest searchRequest = new SearchRequest("huizi");
        //2,构建SearchSourceBuilder查询对象
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //3,构建QueryBuilder对象指定查询方式和查询条件
        QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "小米");
        //4,将QuseryBuilder对象设置到SearchSourceBuilder对象中
        sourceBuilder.query(queryBuilder);
        //5,将SearchSourceBuilder设置到SearchRequest中
        searchRequest.source(sourceBuilder);
        try {
            //6,调用方法查询数据
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            //7,解析返回结果
            SearchHit[] hits = searchResponse.getHits().getHits();
            for (int i = 0; i <hits.length ; i++) {
                System.out.println("返回的结果: "+hits[i].getSourceAsString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    @Test
    public void matchAllDoc(){
        //1,构建SearchRequest请求对象,指定索引库
        SearchRequest searchRequest = new SearchRequest("huizi");
        //2,构建SearchSourceBuilder查询对象
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //3,构建QueryBuilder对象指定查询方式和查询条件
        QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
        //4,将QuseryBuilder对象设置到SearchSourceBuilder对象中
        sourceBuilder.query(queryBuilder);
        //5,将SearchSourceBuilder设置到SearchRequest中
        searchRequest.source(sourceBuilder);

        try {
            //6,调用方法查询数据
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            //7,解析返回结果
            SearchHit[] hits = searchResponse.getHits().getHits();
            for (int i = 0; i <hits.length ; i++) {
                System.out.println("返回的结果: "+hits[i].getSourceAsString());
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @AfterEach
    public void close(){
        if(null!= client){
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}



版权声明:本文为liuhenghui5201原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。