Java进阶篇-SpringBoot集成Elasticsearch(ELS)

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();
}

猜你喜欢

转载自blog.csdn.net/qq_33351639/article/details/129526632