java elasticsearch-rest-high-level-client 根据歌名搜索,创建索引,根据索引ID搜索

1.pom 导入jar

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

ElasticSerarchService.java 根据歌名搜索
package com.redis.demo;


import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.ShardSearchFailure;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.core.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class ElasticSerarchService {
    public static void main(String[] args) throws Exception{
        RestHighLevelClient client = getClient();


        //查询
        //默认ID
        GetRequest getRequest = new GetRequest("songs_v2", "_doc", "5EnOMYEBLnSF9_D_wh38");
        GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
        System.out.println("根据ID查询="+getResponse.getSourceAsString());


        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("songs_v2");

        //查询所有记录
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());
        searchRequest.source(searchSourceBuilder);
//        System.out.println("searchSourceBuilder="+ JSON.toJSONString(searchSourceBuilder));
        //searchSourceBuilder={"query":{"match_all":{"boost":1.0}}}
        System.out.println("searchSourceBuilder="+ searchSourceBuilder);

        //根据条件查询 歌名
//        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//        sourceBuilder.query(QueryBuilders.termQuery("songName", "tianyi"));
//        sourceBuilder.from(0);
//        sourceBuilder.size(5);
//        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//        searchRequest.source(sourceBuilder);
//
//        //{"from":0,"size":5,"timeout":"60s","query":{"term":{"songName":{"value":"tianyi","boost":1.0}}}}
//        //打印输出,而不是JSON.toJSONString方式来输出
//        System.out.println("sourceBuilder="+ sourceBuilder);


        System.out.println("searchRequest="+ JSON.toJSONString(searchRequest));
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

//        RestStatus status = searchResponse.status();
//        TimeValue took = searchResponse.getTook();
//        Boolean terminatedEarly = searchResponse.isTerminatedEarly();
//        boolean timedOut = searchResponse.isTimedOut();
//
//        int totalShards = searchResponse.getTotalShards();
//        int successfulShards = searchResponse.getSuccessfulShards();
//        int failedShards = searchResponse.getFailedShards();
//        for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
//            // failures should be handled here
//            System.out.println("failures should be handled here");
//        }

        SearchHits hits = searchResponse.getHits();
        for (SearchHit hit : hits) {
            // do something with the SearchHit

            String sourceAsString = hit.getSourceAsString();
//            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
//            String documentTitle = (String) sourceAsMap.get("title");
//            List<Object> users = (List<Object>)) sourceAsMap.get("user");
//            Map<String, Object> innerObject =
//                    (Map<String, Object>) sourceAsMap.get("innerObject");
            System.out.println("查询结果sourceAsString=" + sourceAsString);
        }





        close(client);

    }

    private static void close(RestHighLevelClient client) throws IOException {
        client.close();
    }

    private static RestHighLevelClient getClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        return client;
    }
}

IndexTest.java 创建索引

package com.redis.demo.elasticserach;

import com.redis.demo.ElasticSerarchService;
import org.apache.http.HttpHost;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.Cancellable;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.core.TimeValue;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.xcontent.XContentBuilder;
import org.elasticsearch.xcontent.XContentFactory;
import org.elasticsearch.xcontent.XContentType;

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class IndexTest {
    private static RestHighLevelClient getClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        return client;
    }

    private static void close(RestHighLevelClient client) throws IOException {
        client.close();
    }

    public static void main(String[] args) throws Exception{
        IndexRequest request = new IndexRequest("posts");
        request.id("1");
        String jsonString = "{" +
                "\"user\":\"kimchy\"," +
                "\"postDate\":\"2013-01-30\"," +
                "\"message\":\"trying out Elasticsearch\"" +
                "}";
        request.source(jsonString, XContentType.JSON);
//        request.routing("routing");
//        request.timeout(TimeValue.timeValueSeconds(1));
//        request.timeout("1s");

        RestHighLevelClient client = getClient();
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
        System.out.println("indexResponse1="+indexResponse.getResult());

        //无法重复创建索引
        Map<String, Object> jsonMap = new HashMap<>();
        jsonMap.put("user", "kimchy");
        jsonMap.put("postDate", new Date());
        jsonMap.put("message", "trying out Elasticsearch");
        IndexRequest indexRequest = new IndexRequest("posts")
                .id("2").source(jsonMap);

        indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println("indexResponse2="+indexResponse.getResult());

        XContentBuilder builder = XContentFactory.jsonBuilder();
        builder.startObject();
        {
            builder.field("user", "kimchy");
            builder.timeField("postDate", new Date());
            builder.field("message", "trying out Elasticsearch");
        }
        builder.endObject();
        IndexRequest indexRequest3 = new IndexRequest("posts")
                .id("3").source(builder);
        indexResponse = client.index(indexRequest3, RequestOptions.DEFAULT);
        System.out.println("indexResponse3="+indexResponse.getResult());
        /**
         * if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {
         *
         * } else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
         *
         * }
         */

        IndexRequest indexRequest4 = new IndexRequest("posts")
                .id("4")
                .source("user", "kimchy",
                        "postDate", new Date(),
                        "message", "trying out Elasticsearch");

        ActionListener listener = new ActionListener<IndexResponse>() {
            @Override
            public void onResponse(IndexResponse indexResponse) {
                System.out.println("异步通知结果result =" + indexResponse.getResult());
                System.out.println("异步通知结果id =" + indexResponse.getId());

            }

            @Override
            public void onFailure(Exception e) {
                System.out.println("异步通知结果异常啦" + e.getMessage());
            }
        };

        //异步方式
        Cancellable cancellable = client.indexAsync(indexRequest4, RequestOptions.DEFAULT, listener);


        //处理异常的情况,id重复 主键冲突
        IndexRequest request5 = new IndexRequest("posts")
                .id("1")
                .source("field", "value")
                .setIfSeqNo(10L)
                .setIfPrimaryTerm(20);
        try {
            IndexResponse response = client.index(request5, RequestOptions.DEFAULT);
        } catch(ElasticsearchException e) {
            if (e.status() == RestStatus.CONFLICT) {
                System.out.println("5主键冲突啦" + e.getMessage());

            }
        }

        IndexRequest request6 = new IndexRequest("posts")
                .id("1")
                .source("field", "value")
                .opType(DocWriteRequest.OpType.CREATE);
        try {
            IndexResponse response = client.index(request6, RequestOptions.DEFAULT);
        } catch(ElasticsearchException e) {
            if (e.status() == RestStatus.CONFLICT) {
                System.out.println("6主键冲突啦" + e.getMessage());
            }
        }

        //关闭
        close(client);

    }
}

GetRequestTest.java  根据ID查询

package com.redis.demo.elasticserach;

import com.redis.demo.ElasticSerarchService;
import org.apache.http.HttpHost;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.rest.RestStatus;

import java.io.IOException;
import java.util.Map;

public class GetRequestTest {
    private static RestHighLevelClient getClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        return client;
    }

    private static void close(RestHighLevelClient client) throws IOException {
        client.close();
    }

    public static void main(String[] args) throws Exception{
        GetRequest getRequest = new GetRequest(
                "posts",
                "100");

        try {
            RestHighLevelClient client = getClient();
            GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
            String index = getResponse.getIndex();
            String id = getResponse.getId();
            if (getResponse.isExists()) {
                long version = getResponse.getVersion();
                String sourceAsString = getResponse.getSourceAsString();
//                Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
//                byte[] sourceAsBytes = getResponse.getSourceAsBytes();
                System.out.println("sourceAsString=" + sourceAsString);
            } else {
                System.out.println("getResponse不存在");
            }

            //关闭
            close(client);

        } catch (ElasticsearchException e) {
            System.out.println("异常"+e.status());
            if (e.status() == RestStatus.NOT_FOUND) {
                System.out.println("未找到"+e.status());
            }
        }
    }
}

 

posted on 2022-06-11 15:17  oktokeep  阅读(114)  评论(0编辑  收藏  举报