首页 > 技术文章 > SpringBoot整合ElasticsearchBboss

fswhq 2020-10-03 22:00 原文

原文链接:https://my.oschina.net/fusublog/blog/3060127

一 :关于ElasticsearchBboss

关于ElasticsearchBboss的介绍请详见链接传送门

二:记录SpringBoot整合过程

1 引入依赖

 <!--ElasticsearchBboss启动类引入-->
 <dependency>
            <groupId>com.bbossgroups.plugins</groupId>
            <artifactId>bboss-elasticsearch-spring-boot-starter</artifactId>
            <version>5.7.5</version>
</dependency>

2配置集群地址

如果是https的话,需要注意写法略微不同详见传送门里的文档


#springboot maven项目ESBboss配置文件
spring.elasticsearch.bboss.elasticsearch.rest.hostNames=127.0.0.1:9200
#多集群地址由逗号分隔,例,如下:
#spring.elasticsearch.bboss.elasticsearch.rest.hostNames=10.180.211.27:9200,10.180.211.28:9200,10.180.211.29:9200

如果启用了x-pack或searchguard安全身份验证,请在application.properties中使用以下两个属性配置帐户和密码,详见传送门里的文档

扩展配置

#http链接池配置
http.timeoutConnection = 50000
http.timeoutSocket = 50000
http.connectionRequestTimeout=50000
http.retryTime = 1
http.maxLineLength = -1
http.maxHeaderCount = 200
http.maxTotal = 400
http.defaultMaxPerRoute = 200

# dsl配置文件热加载扫描时间间隔,毫秒为单位,默认5秒扫描一次,<= 0时关闭扫描机制
dslfile.refreshInterval = -1

 

3.在springBoot中使用DSL查询

3.1建立实体类的映射 

如果字段类型不一样,映射为null,但是不会不会报错,比较灵活

public class Demo {
    private String id;
    private String name;
    private String tweet;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTweet() {
        return tweet;
    }

    public void setTweet(String tweet) {
        this.tweet = tweet;
    }

    @Override
    public String toString() {
        return "Demo{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", tweet='" + tweet + '\'' +
                '}';
    }
}

3.2在服务提供类中注入ClientInterface 引入xml

@Component
public class TestService {

    /**
     * 创建加载配置文件的客户端工具,用来检索文档,单实例多线程安全
     */
    ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/dsl.xml");

    public ESDatas<Demo> dslOne(Map<String, Object> params) {

        /**
         *执行查询,demo为索引表,_search为检索操作action
         * ESDatas包含当前检索的记录集合,最多10条记录,由dsl中的size属性指定
         * demo为索引表,_search为检索操作action
         * @param searchDatas esmapper/demo.xml中定义的dsl语句
         * @param params 变量参数
         * @param Demo.class  返回的文档封装对象类型
         */
        ESDatas<Demo> esDatas = clientUtil.searchList("us/tweet/_search", "scriptDsl", params, Demo.class);

        return esDatas;
    }

}

xml 如下

<property name="scriptDsl">
    <![CDATA[
        {
          "query": {
            "match": {
              "name":#[name]
            }
          },
           "size":10
        }
    ]]>
</property>

3.3请求参数测试

@RequestMapping("/test")
@Controller
public class TestController {

    @Autowired
    private TestService testService;

    @RequestMapping("/dsl")
    @ResponseBody
    public ESDatas<Demo> DslTest() {

        Map<String, Object> params = new HashMap<String, Object>();
        //设置applicationName1和applicationName2两个变量的值
        params.put("name", "John");

        ESDatas<Demo> esDatas = testService.dslOne(params);

        return esDatas;
    }
}

结果如下

 

推荐阅读