1.介绍
Elasticsearch是一种开源的搜索引擎,它被设计用于处理大规模的数据集。它是基于Apache Lucene搜索引擎库构建的,但是它提供了更加简单和易于使用的API,以便于创建和管理索引、执行搜索、处理大量的数据等。
Elasticsearch支持快速、实时的搜索和分析,并能够处理大量数据,包括结构化和非结构化数据。它可以轻松地集成到各种应用程序中,例如电子商务、社交媒体、日志记录、安全和合规性等应用程序。
Elasticsearch的核心功能包括:
- 快速和实时的搜索
- 索引和存储大量的数据
- 分析和可视化数据
- 提供可扩展和高可用性的集群
- 提供安全和合规性的功能
2.为什么ELS的查询速度这么快?
2.1 倒排索引
Elasticsearch使用了Lucene的倒排索引机制,将每个文档中的每个词项与文档的唯一标识符进行映射。当用户查询时,Elasticsearch会通过倒排索引来查找所有包含查询词的文档,而不是遍历所有文档。
2.2 分布式搜索
Elasticsearch将索引分片存储在多台服务器上,这使得它可以处理大量的数据。当用户进行查询时,Elasticsearch会在所有分片中搜索,并将结果合并返回给用户。
2.3 缓存机制
Elasticsearch会将一些常用的查询结果缓存起来,当下次查询相同的内容时,就可以直接从缓存中读取结果,从而加快查询速度。
2.4 多字段查询
Elasticsearch可以同时对多个字段进行查询,这使得用户可以更加灵活地组合查询条件,提高查询效率。
2.5 搜索建议
Elasticsearch可以根据用户的查询,自动给出搜索建议,帮助用户快速找到相关的内容。
3.ELS基于磁盘还是基于内存?
Elasticsearch是一个基于磁盘的搜索引擎,但它也利用内存来加速搜索和查询。
具体来说,Elasticsearch在磁盘上存储索引和数据,而在内存中缓存热门数据和搜索请求的结果。这使得Elasticsearch能够高效地进行搜索和查询,并提供实时搜索和分析功能。
同时,Elasticsearch也提供了多种配置选项来优化内存和磁盘的使用,以适应不同的应用场景和硬件资源。
4.服务搭建
参考:Java进阶篇-Linux搭建Elasticsearch服务_Yi_Sen_Z的博客-CSDN博客
5.正文
5.1 添加Elasticsearch客户端依赖项
在Spring Boot项目中,需要添加Elasticsearch客户端依赖项。可以通过Maven或Gradle构建工具添加依赖项。
Maven:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.12.1</version>
</dependency>
Gradle:
dependencies {
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.12.1'
}
5.2配置Elasticsearch客户端
配置Elasticsearch客户端,以便能够连接到Elasticsearch服务器。可以在application.properties或application.yml文件中添加以下属性
spring.elasticsearch.rest.uris=http://localhost:9200
5.3 创建Elasticsearch客户端
创建Elasticsearch客户端,以便能够使用它来与Elasticsearch服务器交互。可以使用RestHighLevelClient类创建Elasticsearch客户端
@Configuration
public class ElasticsearchConfig {
@Value("${spring.elasticsearch.rest.uris}")
private String[] uris;
@Bean(destroyMethod = "close")
public RestHighLevelClient restHighLevelClient() {
RestClientBuilder restClientBuilder = RestClient.builder(
new HttpHost(uris[0], 9200, "http")
);
return new RestHighLevelClient(restClientBuilder);
}
}
5.4 编写Elasticsearch存储库
在SpringBoot应用程序中,需要编写Elasticsearch存储库,以便能够将数据存储到Elasticsearch服务器。可以使用Spring Data Elasticsearch来简化Elasticsearch存储库的编写
@Repository
public interface BookRepository extends ElasticsearchRepository<Book, String> {
}
这个存储库将使用Spring Data Elasticsearch提供的默认实现。可以使用自定义查询方法来搜索Elasticsearch中的文档。例如,可以使用以下代码在Elasticsearch中搜索图书
public List<Book> searchBooks(String query) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.queryStringQuery(query))
.build();
Page<Book> page = bookRepository.search(searchQuery);
return page.getContent();
}