当前位置: 代码网 > it编程>编程语言>Java > SpringBoot2如何集成Elasticsearch6.x(TransportClient方式)

SpringBoot2如何集成Elasticsearch6.x(TransportClient方式)

2024年05月26日 Java 我要评论
技术架构spring boot 2.6.3elasticsearch6.6.2jdk1.8依赖pom <properties> <java.version>1

技术架构

  • spring boot 2.6.3
  • elasticsearch6.6.2
  • jdk1.8

依赖pom

   <properties>
        <java.version>1.8</java.version>
        <elasticsearch.version>6.4.3</elasticsearch.version>
    </properties>
 
        <dependency>
            <groupid>org.projectlombok</groupid>
            <artifactid>lombok</artifactid>
            <version>1.18.4</version>
        </dependency>
        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>fastjson</artifactid>
            <version>1.2.59</version>
        </dependency>
        <dependency>
            <groupid>junit</groupid>
            <artifactid>junit</artifactid>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupid>org.elasticsearch</groupid>
            <artifactid>elasticsearch</artifactid>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupid>org.elasticsearch.client</groupid>
            <artifactid>transport</artifactid>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupid>org.elasticsearch.client</groupid>
            <artifactid>elasticsearch-rest-high-level-client</artifactid>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupid>org.elasticsearch.plugin</groupid>
            <artifactid>transport-netty4-client</artifactid>
            <version>${elasticsearch.version}</version>
        </dependency>

application.yml配置

elasticsearch:
  cluster-name: test-es
  # 多台机器用,分割
  cluster-nodes: 192.168.116.200:9300

esconfig 配置类

package com.example.link.config;
 
import lombok.extern.slf4j.slf4j;
import org.elasticsearch.client.transport.transportclient;
import org.elasticsearch.common.settings.settings;
import org.elasticsearch.common.transport.transportaddress;
import org.elasticsearch.transport.client.prebuilttransportclient;
import org.springframework.beans.factory.annotation.value;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.util.stringutils;
 
import java.net.inetaddress;
 
/**
 * @author lanx
 * @date 2022/3/13
 */
@configuration
@slf4j
public class esconfig {
    private static final string cluster_nodes_split_symbol = ",";
    private static final string host_port_split_symbol = ":";
 
 
    @value("${elasticsearch.cluster-name}")
    string clustername;
    @value("${elasticsearch.cluster-nodes}")
    string clusternodes;
 
    @bean
    public transportclient gettransportclient() {
        log.info("elasticsearch init.");
        if (stringutils.isempty(clustername)) {
            throw new runtimeexception("elasticsearch.cluster-name is empty.");
        }
        if (stringutils.isempty(clusternodes)) {
            throw new runtimeexception("elasticsearch.cluster-nodes is empty.");
        }
        try {
            settings settings = settings.builder().put("cluster.name", clustername.trim())
                    .put("client.transport.sniff", true).build();
            transportclient transportclient = new prebuilttransportclient(settings);
            string[] clusternodearray = clusternodes.trim().split(cluster_nodes_split_symbol);
            for (string clusternode : clusternodearray) {
                string[] clusternodeinfoarray = clusternode.trim().split(host_port_split_symbol);
                transportaddress transportaddress = new transportaddress(inetaddress.getbyname(clusternodeinfoarray[0]),
                        integer.parseint(clusternodeinfoarray[1]));
                transportclient.addtransportaddress(transportaddress);
            }
            log.info("elasticsearch init success.");
            return transportclient;
        } catch (exception e) {
            throw new runtimeexception("elasticsearch init fail.");
        }
    }
}

linkwebaapplicationtests 测试类

package com.example.link;
 
import com.alibaba.fastjson.json;
import com.example.link.domain.student;
import lombok.extern.slf4j.slf4j;
import org.elasticsearch.action.bulk.bulkrequestbuilder;
import org.elasticsearch.action.bulk.bulkresponse;
import org.elasticsearch.action.delete.deleteresponse;
import org.elasticsearch.action.index.indexresponse;
import org.elasticsearch.action.search.searchrequestbuilder;
import org.elasticsearch.action.search.searchresponse;
import org.elasticsearch.action.search.searchtype;
import org.elasticsearch.action.update.updaterequest;
import org.elasticsearch.action.update.updateresponse;
import org.elasticsearch.client.transport.transportclient;
import org.elasticsearch.common.xcontent.xcontenttype;
import org.elasticsearch.index.query.boolquerybuilder;
import org.elasticsearch.index.query.querybuilders;
import org.elasticsearch.index.query.functionscore.functionscorequerybuilder;
import org.elasticsearch.index.reindex.bulkbyscrollresponse;
import org.elasticsearch.index.reindex.deletebyqueryaction;
import org.elasticsearch.search.searchhit;
import org.elasticsearch.search.searchhits;
import org.junit.jupiter.api.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;
 
import java.util.arraylist;
import java.util.list;
import java.util.map;
 
 
@runwith(springrunner.class)
@springboottest
@slf4j
class linkwebaapplicationtests {
 
    private student student;
 
    @autowired
    private transportclient transportclient;
 
 
    /**
     * es 插入数据,指定id
     */
    @test
    void test() {
        student = new student();
        student.setname("test2");
        student.setage(20);
       indexresponse response =  transportclient.prepareindex("school","student","1").setsource(json.tojsonstring(student), xcontenttype.json)
                .get();
        log.info("status:{}",response.status().getstatus());
    }
    /**
     * es 插入数据,不指定id
     */
    @test
    void test2() {
        student = new student();
        student.setname("test2");
        student.setage(20);
        indexresponse response =  transportclient.prepareindex("school","student").setsource(json.tojsonstring(student), xcontenttype.json)
                .get();
        log.info("status:{}",response.status().getstatus());
    }
 
    /**
     * es p批量插入数据,不指定id
     */
    @test
    void test3() {
 
        //建立批量提交类
        bulkrequestbuilder bulkrequest =transportclient.preparebulk();
        for (int i = 0; i<= 10 ;i++){
            student = new student();
            student.setname("lx"+i);
            student.setage(i);
            bulkrequest.add(transportclient.prepareindex("school","student").setsource(json.tojsonstring(student), xcontenttype.json));
        }
        bulkresponse bulkresponse=bulkrequest.execute().actionget();
        //提交过程是否产生错误
        if(bulkresponse.hasfailures()){
            log.info("buildfailuremessage:{}",bulkresponse.buildfailuremessage());
        }else {
            log.info("bulkrequest success !");
        }
 
    }
 
    /*
     * 查询分页数据
     */
    @test
    void test4(){
        searchrequestbuilder builder = transportclient.preparesearch("school");
        builder.settypes("student");
        builder.setsearchtype(searchtype.dfs_query_then_fetch);
        builder.setfrom(0);
        builder.setsize(20);
        //explain为true表示根据数据相关度排序,和关键字匹配最高的排在前面
        builder.setexplain(true);
 
        boolquerybuilder querybuilder = querybuilders.boolquery();
        // 搜索 name 字段包含test2的数据
         querybuilder.must(querybuilders.matchquery("name", "lx0"));
        querybuilder.must(querybuilders.matchquery("age", "0"));
        //多个字段查询一个文本
        querybuilder.must(querybuilders.multimatchquery("0", "name","age"));
 
        // 多条件查询 functionscore
        functionscorequerybuilder query = querybuilders.functionscorequery(querybuilder);
        builder.setquery(query);
 
 
        searchresponse response = builder.execute().actionget();
        searchhits hits = response.gethits();
        list<map<string,object>> result = new arraylist<map<string, object>>();
        for (searchhit hit:hits){
            result.add(hit.getsourceasmap());
        }
 
        log.info("result list : {}",json.tojsonstring(result));
 
    }
 
    /**
     * 更新数据
     * @throws exception
     */
    @test
    public void test5() throws exception{
        student = new student();
        student.setname("lx");
        student.setage(30);
        updaterequest updaterequest = new updaterequest();
        updaterequest doc = updaterequest
                .index("school")
                .type("student")
                .id("1")
                .doc(json.tojsonstring(student), xcontenttype.json);
        updateresponse response = transportclient.update(doc).get();
      log.info("status : {}",response.status().tostring());
    }
 
    /**
     * 根据id删除数据
     */
    @test
    public void test6(){
        deleteresponse response = transportclient.preparedelete("school", "student", "1").get();
        log.info("status : {}",response.status());
    }
 
    /**
     * 根据条件删除数据
     */
    @test
    public void test8() {
        bulkbyscrollresponse response = deletebyqueryaction.instance
                .newrequestbuilder(transportclient)
                .filter(querybuilders.matchquery("name", "test2"))
                .source("school") //index
                .get();
        log.info("status : {}",response.getdeleted());
 
    }
 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com