Spring boot的版本是: 2.3.12
ElasticSearch的版本是:7.6.2
在我们的项目中经常会遇到对于字符串的一些操作,例如对于字符串的分词,通过一个词去查找对应的原文(全文搜索)。那可能有人就会问了,使用mysql的模糊查询也可以根据一个词去查找对应的原文呀?是的没有问题,Elasticsearch和 MySQL 是两种不同类型的数据库,各自有不同的特点和适用场景。MySQL 适用于关系型数据存储和复杂的关系查询,适合事务性操作和数据一致性要求较高的场景。Elasticsearch 适用于大规模数据的全文搜索和分析,适合实时性要求较高的场景。下面我们来说一说项目中是如何使用和集成Elasticsearch服务的。
Elasticsearch(简称 ES)是一种开源的分布式搜索和分析引擎,具有以下几个主要的好处:
<dependency>
<groupId>org.elasticsearch.clientgroupId>
<artifactId>elasticsearch-rest-high-level-clientartifactId>
<version>7.6.2version>
dependency>
根据安装的Elasticsearch的版本来填写version标签中的内容
elasticsearch:
host: localhost 填写es服务的ip地址
port: 9200 es服务的端口号
client:
type: http 请求es的类型:通过http或者内部的javaAPI通信
username: xxxx 登录es的账号
password: xxxx 登录es的密码
如果es服务没有设置账号和密码可以不进行账号密码配置的填写(为了安全建议添加上账号面密码)
一个RestHighLevelClient实例需要一个REST底层客户端构建器
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private int port;
@Value("${elasticsearch.client.type}")
private String clientType;
@Autowired
private RestHighLevelClient client;
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost(host, port, clientType)));
return client;
}
@Autowired
private RestHighLevelClient client;
public void test() throws IOException {
AnalyzeRequest analyzeRequest = AnalyzeRequest.withGlobalAnalyzer("ik_smart", "武梓龙来写CSDN博客来了");
AnalyzeResponse analyze = client.indices().analyze(analyzeRequest, RequestOptions.DEFAULT);
for (AnalyzeResponse.AnalyzeToken token : analyze.getTokens()) {
System.out.println(token.getTerm());
}
}
示例是将一段话进行分词操作,其中withGlobalAnalyzer方法的第一个参数是指定分词器ik_smart分词器(当然也可以使用其他分词器,根据业务的需求进行调整) 是es服务中安装了IK的插件实现的,如果不安装IK分词器的插件ik_smart分词器是无法使用的。第二个参数就是我们分词的内容了。
项目集成并使用ES服务可以提供强大的搜索和分析功能,帮助项目实现实时搜索、复杂查询和聚合分析等需求。ES具有分布式架构和高可用性,可以处理大规模数据并保证系统的可用性。同时,ES还拥有丰富的生态系统和工具支持,可以更好地集成和使用。因此,在项目中使用ES可以提升搜索和分析的效率和能力,满足项目的需求。