ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-06-11 15:36:16  阅读:157  来源: 互联网

标签:歌名 new 索引 client 搜索 elasticsearch import org out


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());
            }
        }
    }
}

 

标签:歌名,new,索引,client,搜索,elasticsearch,import,org,out
来源: https://www.cnblogs.com/oktokeep/p/16365987.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有