前言:现在公司有一个项目要用到检索功能,检索上面现在最常用的是Solr/ES,最后经过对比选择了ElasticSearch开源组件包,因为这个是公司的一个产品项目,技术版本当然要用最新的啦,最后完全确定的技术是SpringBoot2.2.2+es7.5.1.好了废话不多说;上硬菜.

  材料:

    1: SpringBoot 2.2.2快速脚手架

    2: ElasticSearch7.5.1 for Linux

  1 安装ElasticSearch

    安装就不说了,安装文档一大堆,网上百度去吧。

  2 项目的pom.xml

    

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.5.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
<scope>runtime</scope>
</dependency>

3: 集成开始

  ElasticSearch的发展历史,简单的说就是渐渐的淘汰了以前类似于redis-client那样类似的客户端API模式,现在基本上都是基于Restful规范的APIS,根据官方文档说明的推荐就是这样的Http请求方式,它分为两个版本的rest-client,第一个是高级版本、第二个是普通版本,对于我们程序员来说,毋庸置疑高级版本啦。

3.1 集成第一篇

  集成之前确保ElasticSearch的服务是启动的,不然会发生链接超时保存.

  第一种方式:

    使用工具类的方式集成:

    新建一个ElasticServerUtils类,代码如下:

  

@Component
public class ElasticServiceUtils { /**
* <li>logger :SLF4J日志 </li>
*/
private final static Logger logger = LoggerFactory.getLogger(ElasticServiceUtils.class); private RestHighLevelClient restHighLevelClient; /**
* <li>Description: 在Servlet容器初始化前执行 </li>
*/
@PostConstruct
private void init() {
try {
if (restHighLevelClient != null) {
restHighLevelClient.close();
}
//节点1和2
HttpHost node1 = new HttpHost("192.168.10.40", 9200, "http");
HttpHost node2 = new HttpHost("192.168.10.95", 9200, "http");
RestClientBuilder builder = RestClient.builder(node1,node2);
restHighLevelClient = new RestHighLevelClient(builder);
} catch (IOException e) {
e.printStackTrace();
logger.error(e.getMessage());
}
}
//省略创建索引更新索引等代码,官网有具体的例子.
//官网地址: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-index.html
}

  第二种方式:

    这个方式就是和Spring框架深度集成,类似将RestHighLevelClient类的生命周期交给Spring区管理, 优点是使用方便直接使用@Autowired注解就可以获取到对象.缺点是相对的复杂.

  第一步: 需要编写Bean的托管和创建配置.

  代码:

  

/**
* <li>hosts :配置的值 </li>
*/
@Value("${elasticsearch.hosts}")
private String[] hosts; /**
* <li>restHighLevelClient :restHighLevel客户端 </li>
*/
private RestHighLevelClient restHighLevelClient; /**
* 返回实例
* @return RestHighLevelClient
* @throws Exception 异常信息
*/
@Override
public RestHighLevelClient getObject() throws Exception {
return this.restHighLevelClient;
} /**
* 反射
*
* @return RestHighLevelClient.class
*/
@Override
public Class<?> getObjectType() {
return RestHighLevelClient.class;
} /**
* 客户端是否单例
* @return true
*/
@Override
public boolean isSingleton() {
return true;
} /**
* 客户端实例的销毁
* @throws Exception 异常信息
*/
@Override
public void destroy() throws Exception {
if (restHighLevelClient != null) {
restHighLevelClient.close();
}
} /**
* 注入参数
* @throws Exception 异常信息
*/
@Override
public void afterPropertiesSet() throws Exception {
restHighLevelClient = buildClient();
} /**
* <li>Description: 自定义的构造方法 </li>
*
* @return RestHighLevelClient
*/
private RestHighLevelClient buildClient() {
try {
//这里的builder方法有两个方式,第一个是传入Node(包含了多个节点,需要密码这些,我们没有配置,就暂时不需要),第二个就是传入HttpHost
restHighLevelClient = new RestHighLevelClient(RestClient.builder(HttpHost.create(hosts[0]), HttpHost.create(hosts[1])));
} catch (Exception e) {
logger.error(e.getMessage());
}
return restHighLevelClient;
}
配置代码:
  
elasticsearch:
hosts: 192.168.10.40:9200,192.168.10.95:9200

  这样就算是集成完了.

最新文章

  1. Spring 4 集成Apache CXF开发JAX-RS Web Service
  2. java 基础三 下雪
  3. Hadoop基础知识
  4. C#知识点总结系列:C# 数据结构
  5. HeadFirst设计模式之命令模式
  6. Android 把从网络获取的图片缓存到内存中
  7. DictoryInfo.GetFiles
  8. Android Monkey 测试策略【转】
  9. 实验一 windows基本网络命令
  10. C# — 调用dll出现试图加载不正确格式的程序问题
  11. componentWillMount和componentDidMount的区别
  12. java常见面试题及答案 11-20(JVM)
  13. 【模板】Treap
  14. JavaScript学习(五)
  15. .Net Core 全球化&amp;本地化的使用
  16. tomcat jvm 内存调优 适用于 JDK 6 &amp; 7
  17. laravel 5.1部署到 集成环境 lnmp上
  18. missing gradle project information
  19. HTTP、TCP、UDP以及SOCKET
  20. codeforces315Div1 B Symmetric and Transitive

热门文章

  1. 操作CLOB数据——oracle
  2. SPOJ - AMR11H Array Diversity (排列组合)
  3. CodeForces - 710E Generate a String (dp)
  4. c++ opencv 入门
  5. 1 ~ express ~ 初始化。安装第三方模块express。中间件
  6. 颜色设置 &lt;color name=&quot;white&quot;&gt;#FFFFFF&lt;/color&gt;&lt;!--白色 --&gt;
  7. python字符串常用函数
  8. URAL_1146/uva_108 最大子矩阵 DP 降维
  9. Android自定义View——刮刮卡效果
  10. PTA天梯赛L2