国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[elastic 8.x]java客戶端連接elasticsearch與操作索引與文檔

這篇具有很好參考價(jià)值的文章主要介紹了[elastic 8.x]java客戶端連接elasticsearch與操作索引與文檔。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

初始化客戶端

引入相關(guān)依賴

<dependency>
    <groupId>co.elastic.clients</groupId>
    <artifactId>elasticsearch-java</artifactId>
    <version>8.10.2</version>
</dependency>

初始化客戶端

為了方便演示,我關(guān)閉了elasticsearch的安全驗(yàn)證,帶安全驗(yàn)證的初始化方式將在最后專門介紹

String serverUrl="http://127.0.0.1:9200";
RestClient restClient=RestClient
                .builder(HttpHost
                .create(serverUrl))
                .build();
ElasticsearchTransport transport=new RestClientTransport(restClient,new JacksonJsonpMapper());
ElasticsearchClient esClient=new ElasticsearchClient(transport);

索引

創(chuàng)建索引

    void createIndex(){

        String mappings = "{\n" +
                "  \"properties\" : {\n" +
                "    \"id\" : {\n" +
                "      \"type\" : \"keyword\" \n" +
                "    },\n"+
                "    \"name\" : {\n" +
                "      \"type\" : \"text\",\n" +
                "      \"fields\" : {\n" +
                "        \"keyword\" : {\n" +
                "          \"type\" : \"keyword\",\n" +
                "          \"ignore_above\" : 256 \n" +
                "        }\n" +
                "      } \n" +
                "    }, \n" +
                "    \"price\" : { \n" +
                "      \"type\" : \"long\" \n" +
                "     } \n" +
                "  }\n" +
                "}\n";
        JsonpMapper mapper=esClient._transport().jsonpMapper();
        JsonParser parser= Json.createParser(new StringReader(mappings));
        CreateIndexRequest createIndexRequest=new CreateIndexRequest.Builder().index("test")
                .mappings(TypeMapping._DESERIALIZER.deserialize(parser,mapper)).build();
        try {
            esClient.indices().create(createIndexRequest);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

刪除索引

    void deleteMapping(){
        try {
            DeleteIndexResponse response;
            response= esClient.indices().delete(deleteIndexRequest->deleteIndexRequest.index("test"));
            System.out.println(response.toString());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

判斷索引是否存在

    
    void existsIndex(){
        try {
            BooleanResponse hotel = esClient.indices().exists(existsIndexRequest -> existsIndexRequest.index("hotel"));
            System.out.println(hotel.value());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

文檔

新增文檔

    void insertDoc(){
        Hotel hotel=hotelService.getById(61083L);
        HotelDoc hotelDoc=new HotelDoc(hotel);
        IndexRequest<HotelDoc> request=new IndexRequest.Builder<HotelDoc>()
                .id("11")
                .index("hotel")
                .document(hotelDoc)
                .build();
        try {
            IndexResponse index = esClient.index(request);
            System.out.println(index.id());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

其中,HotelDoc是一個(gè)實(shí)體類

刪除文檔

    void deleteDoc(){
        try {
            esClient.delete(deleteRequest->deleteRequest.index("hotel").id("11"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

查詢文檔

    void searchDoc(){
        TermQuery termQuery= QueryBuilders.term()
                .field("_id")
                .value("11")
                .build();
        SearchRequest request=new SearchRequest.Builder()
                        .index("hotel")
                        .query(termQuery._toQuery()).build();
        try {
            SearchResponse<HotelDoc> response=esClient.search(request,HotelDoc.class);
            
            //輸出結(jié)果
            for(Hit<HotelDoc> hit:response.hits().hits()){
                System.out.println(hit.source());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

更新文檔

    void updateDoc(){
        HotelDoc hotelDoc=new HotelDoc();
        //需要更新哪個(gè)字段就賦值哪個(gè)字段
        hotelDoc.setCity("xx");
        try {
            esClient.update(updateRequest->updateRequest
                            .index("hotel")
                            .id("11")
                            .doc(hotelDoc)
                    ,HotelDoc.class);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

批量導(dǎo)入文檔

    void insertMany(){
        List<Hotel> hotels=hotelService.list();
        List<HotelDoc> hotelDocs=hotels.stream().map(HotelDoc::new).collect(Collectors.toList());
        BulkRequest.Builder bl=new BulkRequest.Builder();
        for(HotelDoc hotelDoc:hotelDocs){
            bl.operations(op->op.index(
                    idx->idx.index("hotel")
                            .id(hotelDoc.getId().toString())
                            .document(hotelDoc)
            ));
        }
        try {
            esClient.bulk(bl.refresh(Refresh.WaitFor).build());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

連接Https集群

帶安全驗(yàn)證的連接有點(diǎn)復(fù)雜,將下列代碼中CA證書的位置改為實(shí)際所在的位置就行了。

通過(guò)用戶名密碼連接

password為elastic的密碼,可以在我的另一篇文章中查看密碼的重置方式
Docker安裝部署[8.x]版本Elasticsearch+Kibana+IK分詞器

    void makeConnection_https() throws CertificateException, IOException,
            NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
        // 創(chuàng)建憑據(jù)提供器
        final CredentialsProvider credentialsProvider =
                new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials("elastic", password));

        // 設(shè)置CA證書路徑
        Path caCertificatePath = Paths.get("E:\\tools\\elasticsearch-8.10.2\\config\\certs\\http_ca.crt");
        // 創(chuàng)建證書工廠
        CertificateFactory factory =
                CertificateFactory.getInstance("X.509");
        Certificate trustedCa;
        try (InputStream is = Files.newInputStream(caCertificatePath)) {
            // 從輸入流中生成證書
            trustedCa = factory.generateCertificate(is);
        }
        // 創(chuàng)建密鑰庫(kù)
        KeyStore trustStore = KeyStore.getInstance("pkcs12");
        trustStore.load(null, null);
        trustStore.setCertificateEntry("ca", trustedCa);
        // 創(chuàng)建SSL上下文構(gòu)建器
        SSLContextBuilder sslContextBuilder = SSLContexts.custom()
                .loadTrustMaterial(trustStore, null);
        final SSLContext sslContext = sslContextBuilder.build();

        // 構(gòu)建Rest客戶端構(gòu)建器
        RestClientBuilder builder = RestClient.builder(
                        new HttpHost("localhost", 9200, "https"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(
                            HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setSSLContext(sslContext)
                                .setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // 構(gòu)建Rest客戶端
        RestClient restClient = builder.build();

        // 創(chuàng)建Rest客戶端傳輸
        ElasticsearchTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper());
        esClient = new ElasticsearchClient(transport);
//        asyncClient = new ElasticsearchAsyncClient(transport);
    }

通過(guò)ApiKey連接

ApiKey在Kibana的Security下生成文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-848112.html

     void makeConnection_token() throws CertificateException, IOException,
            NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
        // 定義CA證書路徑
        Path caCertificatePath = Paths.get("E:\\tools\\elasticsearch-8.10.2\\config\\certs\\http_ca.crt");
        // 創(chuàng)建X.509證書工廠
        CertificateFactory factory =
                CertificateFactory.getInstance("X.509");
        Certificate trustedCa;
        try (InputStream is = Files.newInputStream(caCertificatePath)) {
            // 從輸入流中生成X.509證書
            trustedCa = factory.generateCertificate(is);
        }
        // 創(chuàng)建PKCS12密鑰庫(kù)
        KeyStore trustStore = KeyStore.getInstance("pkcs12");
        trustStore.load(null, null);
        // 將CA證書添加到密鑰庫(kù)
        trustStore.setCertificateEntry("ca", trustedCa);
        // 創(chuàng)建SSL上下文構(gòu)建器,并設(shè)置信任材料
        SSLContextBuilder sslContextBuilder = SSLContexts.custom()
                .loadTrustMaterial(trustStore, null);
        final SSLContext sslContext = sslContextBuilder.build();

        // 創(chuàng)建Rest客戶端構(gòu)建器
        RestClientBuilder builder = RestClient.builder(
                        new HttpHost("localhost", 9200, "https"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(
                            HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setSSLContext(sslContext);
                    }
                });

        // 設(shè)置默認(rèn)請(qǐng)求頭
        Header[] defaultHeaders =
                new Header[]{new BasicHeader("Authorization",
                        "ApiKey yourApiKey")};
        builder.setDefaultHeaders(defaultHeaders);

        // 構(gòu)建Rest客戶端
        RestClient restClient = builder.build();

        // 創(chuàng)建基于RestClient的傳輸方式
        ElasticsearchTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper());

        // 創(chuàng)建Elasticsearch客戶端
        esClient = new ElasticsearchClient(transport);
    }

到了這里,關(guān)于[elastic 8.x]java客戶端連接elasticsearch與操作索引與文檔的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【ElasticSearch】使用 Java 客戶端 RestClient 實(shí)現(xiàn)對(duì)文檔的查詢操作,以及對(duì)搜索結(jié)果的排序、分頁(yè)、高亮處理

    【ElasticSearch】使用 Java 客戶端 RestClient 實(shí)現(xiàn)對(duì)文檔的查詢操作,以及對(duì)搜索結(jié)果的排序、分頁(yè)、高亮處理

    在 Elasticsearch 中,通過(guò) RestAPI 進(jìn)行 DSL 查詢語(yǔ)句的構(gòu)建通常是通過(guò) HighLevelRestClient 中的 resource() 方法來(lái)實(shí)現(xiàn)的。該方法包含了查詢、排序、分頁(yè)、高亮等所有功能,為構(gòu)建復(fù)雜的查詢提供了便捷的接口。 RestAPI 中構(gòu)建查詢條件的核心部分是由一個(gè)名為 QueryBuilders 的工具類提供

    2024年01月16日
    瀏覽(41)
  • ElasticSearch的客戶端操作

    ElasticSearch的客戶端操作

    ElasticSearch的客戶端操作 使用Kibana進(jìn)行以下實(shí)驗(yàn),進(jìn)行Restful接口訪問 索引庫(kù)操作,完成對(duì)索引的增、刪、查操作 “acknowledged” : true, 代表操作成功 “shards_acknowledged” : true, 代表分片操作成功 “index” : “shopping” 表示創(chuàng)建的索引庫(kù)名稱 注意:創(chuàng)建索引庫(kù)的分片數(shù)默認(rèn)5片,

    2024年02月12日
    瀏覽(92)
  • 【Elasticsearch學(xué)習(xí)筆記五】es常用的JAVA API、es整合SpringBoot項(xiàng)目中使用、利用JAVA代碼操作es、RestHighLevelClient客戶端對(duì)象

    目錄 一、Maven項(xiàng)目集成Easticsearch 1)客戶端對(duì)象 2)索引操作 3)文檔操作 4)高級(jí)查詢 二、springboot項(xiàng)目集成Spring Data操作Elasticsearch 1)pom文件 2)yaml 3)數(shù)據(jù)實(shí)體類 4)配置類 5)Dao數(shù)據(jù)訪問對(duì)象 6)索引操作 7)文檔操作 8)文檔搜索 三、springboot項(xiàng)目集成bboss操作elasticsearch

    2023年04月09日
    瀏覽(37)
  • Elasticsearch Java客戶端

    客戶端 優(yōu)點(diǎn) 缺點(diǎn) 說(shuō)明 Java Low Level Rest Client 與ES版本之間沒有關(guān)系,適用于作為所有版本ES的客戶端 Java High Level Rest Client 使用最多 使用需與ES版本保持一致 基于Low Level Rest Client, 注意:7.15版本之后將被棄用 TransportClient 使用Transport 接口進(jìn)行通信,能夠使用ES集群中的一些特

    2024年02月15日
    瀏覽(21)
  • 袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎(chǔ)操作

    袁庭新ES系列15節(jié)|Elasticsearch客戶端基礎(chǔ)操作

    上一章節(jié)我們介紹了搭建Elasticsearch集群相關(guān)的知識(shí)。那么又該如何來(lái)操作Elasticsearch集群呢?在ES官網(wǎng)中提供了各種語(yǔ)言的客戶端,我們?cè)陧?xiàng)目開發(fā)過(guò)程中有多種Elasticsearch版本和連接客戶端可以選擇,那么他們有什么區(qū)別?這一章節(jié)袁老師帶領(lǐng)大家來(lái)學(xué)習(xí)Elasticsearch客戶端相關(guān)

    2024年04月25日
    瀏覽(26)
  • java socket Server TCP服務(wù)端向指定客戶端發(fā)送消息;可查看、斷開指定連接的客戶端;以及設(shè)置客戶端最大可連接數(shù)量。

    首先需要知道java里如何創(chuàng)建一個(gè)Socket服務(wù)器端。 提示:注意server.accept()方法調(diào)用會(huì)阻塞,只有新的客戶端連接后才返回一個(gè)新的socket對(duì)象。如果一直未連接那么會(huì)一直處于阻塞狀態(tài) 了解了如何創(chuàng)建一個(gè)socket服務(wù)器端后。那么如何實(shí)現(xiàn)給指定的連接客戶端發(fā)送消息呢?首先我

    2024年02月11日
    瀏覽(24)
  • 干貨 | Elasticsearch Java 客戶端演進(jìn)歷史和選型指南

    干貨 | Elasticsearch Java 客戶端演進(jìn)歷史和選型指南

    Elasticsearch 官方提供了很多版本的 Java 客戶端,包含但不限于: Transport 客戶端 Java REST 客戶端 Low Level REST 客戶端 High Level REST 客戶端 Java API 客戶端 非官方的 Java 客戶端,包含但不限于: Jest 客戶端 BBoss 客戶端 Spring Data Elasticsearch 客戶端 ...... 寫出來(lái)的就接近十款客戶端! El

    2023年04月11日
    瀏覽(23)
  • java 客戶端操作HDFS

    部署包win版本 源碼包zip包 lib整合:共121個(gè)jar包 $HADOOP_PREFIX/share/hadoop/{common,hdfs,mapreduce,yarn,tools}/{lib,.}*.jar ?將windows版本hadoop/bin/hadoop.dll 放到c:/windows/system32下 hadoop的bin和sbin目錄放PATH中+HADOOP_HOME+HADOOP_USER_NAME=root 安裝插件 配置 重啟電腦?。。。。。?!加載hadoop.dll 創(chuàng)建java p

    2024年02月10日
    瀏覽(87)
  • HDFS之Java客戶端操作

    HDFS之Java客戶端操作

    Hadoop版本:Hadoop-3.1.3 Linux版本:CentOS7.5 IDE工具:IntelliJ IDEA(Windows環(huán)境下) HDFS的Java客戶端操作也是入門Hadoop開發(fā)的學(xué)習(xí)重點(diǎn) 下載依賴 https://github.com/steveloughran/winutils 根據(jù)自己的Hadoop安裝版本選擇對(duì)應(yīng)版本的依賴,如果需要更高版本的依賴,請(qǐng)從以下地址下載 https://github.

    2024年02月12日
    瀏覽(46)
  • Elasticsearch Java客戶端和Spring data elasticsearch-Elasticsearch文章三

    Elasticsearch Java客戶端和Spring data elasticsearch-Elasticsearch文章三

    https://www.elastic.co/cn/ 整合springboot看上一篇文章 一定要對(duì)應(yīng)好版本,Elasticsearch 的不同版本變化是真大, https://docs.spring.io/spring-data/elasticsearch/docs/4.4.10/reference/html/ Springboot: 2.7.10 spring-data-elasticsearch: 4.4.10 spring-boot-starter-data-elasticsearch: 2.7.10 elasticsearch-java: 7.17.9 https://github.com/

    2024年02月14日
    瀏覽(44)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包