秋刀鱼足迹

秋刀鱼足迹

技术博客。秋刀鱼,技术人,后端开发工程师。
  • 邮箱1003682467@qq.com
  • 微信号acgg99222
  • 城市福建福州

SpringBoot整合ElasticSearch

一、基于spring-boot-starter-data-elasticsearch整合

 开发环境:springboot版本:2.0.1,elasticSearch-5.6.8.jar版本:5.6.8,服务器部署ElasticSearch版本:6.3.2

1、application.properties

spring.data.elasticsearch.cluster-name=elasticsearch
								spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300spring.data.elasticsearch.repositories.enabled=true

2、pom.xml

        <!--spring整合elasticsearch包-->        <dependency>  
										   <groupId>org.springframework.boot</groupId>  
										   <artifactId>spring-boot-starter-data-elasticsearch</artifactId>  
									   </dependency>        <!--实体工具包-->        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>        </dependency>        <!--集合工具包-->        <dependency>            <groupId>com.google.guava</groupId>            <artifactId>guava</artifactId>            <version>19.0</version>        </dependency>

3、Notice实体

@Data
								@AllArgsConstructor
								@NoArgsConstructor//indexName代表所以名称,type代表表名称@Document(indexName = "wantu_notice_info", type = "doc")public class Notice {    //id
									@JsonProperty("auto_id")    private Long id;    //标题
									@JsonProperty("title")    private String title;    //公告标签
									@JsonProperty("exchange_mc")    private String exchangeMc;    //公告发布时间
									@JsonProperty("create_time")    private String originCreateTime;    //公告阅读数量
									@JsonProperty("read_count")    private Integer readCount;
									
								}

4、NoticeRepository类

import com.jincou.elasearch.domain.Notice;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Component;
								
								@Componentpublic interface NoticeRepository extends ElasticsearchRepository<Notice, Long> {
								
								}

5、NoticeController

"/api/v1/article"  CommandResult<Void> save(= 123"springboot整合elasticsearch,这个是新版本 2018年" CommandResult<List<Notice>> search(String title,@PageableDefault(page = 1, value = 10= QueryBuilders.matchQuery("title"<Notice> listIt =<Notice> list=

6、查看运行结果

它会进行中文分词查询,然后安装相识度进行排序

总体步骤还是蛮清晰简单的,因为有spring-boot-starter-data-elasticsearch进行了整合,所以我们可以少敲很多代码。

 

二、 基于TransportClient整合

首先明白:如果项目SpringBoot1.5.X以下的,那么elasticSearch.jar最高是2.4.4版本的,只有SpringBoot2.X+,elasticSearch.jar才是5.X+

              如果你的SpringBoot是1.5.X以下,那你又想用elasticSearch.jar5.X+怎么办呢,那就不要用spring-boot-starter-data-elasticsearch,用原生的TransportClient实现即可。

这个相当于用原生的去使用elasticsearch,这里面并没有用到spring-boot-starter-data-elasticsearch相关jar包,因为我们公司的springBoot版本是1.5.9。

如果用spring-boot-starter-data-elasticsearch的话,那么elasticsearch版本最高只有2.4.4,这也太落后了,现在elasticsearch已经到6.3.2了,为了用更好的版本有两个方案:

1、提高springboot版本到2.X(不过不现实,船大难掉头),2、用原生的TransportClient实现。最终落地实现是通过TransportClient实现

把关键代码展示出来。

1、pom.xml

    <dependency>            <groupId>org.elasticsearch</groupId>            <artifactId>elasticsearch</artifactId>            <version>5.6.8</version>        </dependency>        <dependency>            <groupId>org.elasticsearch.client</groupId>            <artifactId>transport</artifactId>            <version>5.6.8</version>        </dependency>        <dependency>            <groupId>org.apache.logging.log4j</groupId>            <artifactId>log4j-core</artifactId>            <version>2.7</version>        </dependency>

2、创建实体

    @Configuration    public class ServerModule {        @Bean        public TransportClient transportClient() {
											Settings settings = Settings.builder().put("cluster.name", "biteniuniu").build();            //我用6.3.2版本的时候这里一直报异常说找不到InetSocketTransportAddress类,这应该和jar有关,当我改成5.6.8就不报错了
											TransportClient client = new PreBuiltTransportClient(settings);//6.3.2这里TransportAddress代替InetSocketTransportAddress
											client.addTransportAddress(new InetSocketTransportAddress(                    new InetSocketAddress(InetAddresses.forString("127.0.0.1"), 9300)));            return client;
										}
									}

3、NoticeController类

"/api/v1/notice" = "trsearch", method = RequestMethod.GET, produces = CommandResult<List<Notice>> search(@RequestParam(value = "title", defaultValue = "比特币")String title, @RequestParam(value = "page", defaultValue = "0"= "size", defaultValue = "20"="title"= transportClient.prepareSearch("wantu_notice_info").setTypes("doc"
												.setExplain(=<Notice> list =<String, Object> sourceAsMap =
											String titles = (String) sourceAsMap.get("title"
											Integer readCount = (Integer) sourceAsMap.get("read_count"=


 总结下:第一种整合相对简单很多,因为本身封装很多东西,比如分页,封装数据等。第二种的话可以在不用spring的情况下使用它。