最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • RestHighLevelClient-简单使用

    一、创建连接
    !ps:RestHighLevelClient是官方指定的连接api。另外一个是TransportClient,但是TransportClient这个是已经废弃不用的,所以会在ES8.0之后完全移除,也就是说8.0之后就无法使用了
    RestHighLevelClient的Maven依赖为(使用前必须添加相应依赖)

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.9.2</version>
    </dependency>
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>7.9.2</version>
     </dependency>
    

    注意:以上的依赖版本可以根据你使用的ES的版本来定,向下兼容,但是无法向上兼容

    创建连接

        static String ip = "localhost";
        static int port = 9200;
        static RestHighLevelClient restHighLevelClient = null;
        static TransportClient client = null;
        
        static  RestHighLevelClient initClient(){
            //这里的RestClient.builder(new HttpHost(ip,port),.........)支持多个httphost连接,也就是支持连接多个elasticsearch
            restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost(ip,port)));
        }
    
        static Connection getInstance(){
            synchronized (ElasticSearchFactory.class){
                if (restHighLevelClient == null){
                 restHighLevelClient  =   initClient();
                }
            }
            return connection;
        }
    

    RestHighLevelClient 支持对ES的增删改查、批量操作
    新增:

     public static  void creatIndex(String JSON){
            IndexRequest indexRequest = new IndexRequest("test_index","String");
            indexRequest.source(json, XContentType.JSON);//这里的json为存入ES的文档内容
            try {
                restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);//RequestOptions在新方法中必须选择
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    查询:
    查询支持直接查询和条件查询,由于ES是根据索引、文档类型和文档ID确定一个唯一的文档的,所以直接查询必须要有索引和类型还有ID

        public static Map<String, Object> getIndex(String indexName,String type,String id){
            GetRequest request = new GetRequest(indexName);
            //SearchRequest searchRequest = new SearchRequest(indexName);
            try {
                GetResponse search = restHighLevelClient.get(request, RequestOptions.DEFAULT);
                Map<String, Object> source = search.getSource();
                return source;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return new HashMap<>();
        }
    

    条件查询:
    条件查询支持所有的ES的查询规则:使用ES查询语句须知

        public static Map<String, Object> searchIndex(String indexName){
            //GetRequest request = new GetRequest(indexName);
            //SearchRequest searchRequest = new SearchRequest(indexName);
            QueryBuilder queryBuilders = QueryBuilders.boolQuery().filter(
                    QueryBuilders.terMQuery("queryKey","吱吱吱ZZZ")
            );
            SearchRequest searchRequest = new SearchRequest();
            //searchRequest.indices("posts");这里可以设计GEET或者POST
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            // searchSourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));支持按评分排序,评分是指分词之后取得的文档相似度评分
            searchSourceBuilder.query(QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("queryKey.keyWord","吱吱吱ZZZ")));
            searchRequest.source(searchSourceBuilder);
            try {
                SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
                SearchHit[] hits = search.getHits().getHits();
                for (SearchHit searchHit : hits){
                    Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
                    System.out.println("source : {}" + sourceAsMap.toString());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return new HashMap<>();
        }
    

    修改:
    ps:ES中其实并不存在真正意义上的修改,其实是进行的文档覆盖,先将原文档查出来标记删除,然后在原文档的基础上添加上修改形成一份新文档,存入ES中,之后再将打上删除标记的文档删除。

        public static void updateIndex(String indexName, String type, String id, String json){
            UpdateRequest request = new UpdateRequest(indexName, type, id);
    
            request.doc(json, XContentType.JSON);
            try {
                UpdateResponse updateResponse = restHighLevelClient.update(request,RequestOptions.DEFAULT);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    删除:

    
        public static void deleteIndex(String indexName, String type, String id){
            DeleteRequest request = new DeleteRequest(indexName,type,id);
            try {
                restHighLevelClient.delete(request,RequestOptions.DEFAULT);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    bulk操作,bulk操作相当于批处理,能够在一次操作中处理一批数据,同时能够同时处理,增删改操作

        public static void bulkIndex(){
                BulkRequest request = new BulkRequest();
                String jsonString="{n" +
                        "t"databaseId": "謝謝謝謝謝謝",n" +
                        "t"databaseType": "嘻嘻嘻",n" +
                        "t"queryKey":"吱吱吱ZZZ"n" +
                        "}n";
            UUID uuid = UUID.randomUUID();
            request.add(new IndexRequest("test_index", "String", uuid.toString())
                        .source(jsonString,XContentType.JSON));
                String updateJson="{n" +
                        "  "queryKey":"吱吱吱ZZZ"n" +
                        "}";
                request.add(new UpdateRequest("test_index", "String", uuid.toString())
                        .doc(updateJson,XContentType.JSON));
                request.add(new DeleteRequest("test_index", "String", uuid.toString()));
    
            try {
                restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    执行ES-DSL

    
    String json = "{"bool":{"filter":[{"term":{"queryKey.keyword":"吱吱吱ZZZ"}}]}}";
    String index= "test_index";
        public static void wapQuerty(String json,String index){
            WrapperQueryBuilder queryBuilder = new WrapperQueryBuilder(json);
            SearchRequest searchRequest = new SearchRequest();
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(queryBuilder);
            searchRequest.source(searchSourceBuilder).indices(index);
            try {
                SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
                SearchHit[] hits = search.getHits().getHits();
                for (SearchHit searchHit : hits){
                    Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
                    String id = searchHit.getId();
                    System.out.println("id:"+id);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » RestHighLevelClient-简单使用
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 292稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情