返回

ES:从入门到整合Springboot,一章直达!

后端

Elasticsearch:全方位入门指南

了解 Elasticsearch

Elasticsearch(ES)是一种强大的开源搜索引擎,基于 Lucene 构建。它以其分布式、可扩展性和高性能著称,使其实现了前所未有的搜索体验。

Elasticsearch 的用武之地

ES 的应用场景十分广泛,包括但不限于:

  • 网站搜索: 为网站提供快速且精确的搜索能力。
  • 日志分析: 从日志文件中提取有价值的信息。
  • 应用程序搜索: 为应用程序提供搜索功能,例如产品搜索、用户搜索等。
  • 机器学习: 作为机器学习算法的特征工程工具,用于提取和转换数据。

Elasticsearch 与 MySQL 的比较

ES 和 MySQL 都是流行的数据库,但它们有着不同的用途和特性:

特性 Elasticsearch MySQL
数据模型 文档型 行列型
索引方式 倒排索引 B+ 树索引
查询方式 全文检索 结构化查询
可扩展性 水平扩展 垂直扩展
高可用性 支持 不支持
实时性 支持 不支持

Elasticsearch 语法

文档: ES 中的数据存储在称为文档的 JSON 对象中。文档可以包含一个或多个字段,字段类型包括字符串、数字、布尔值、日期、数组和对象。

索引: 索引是 ES 中存储和检索文档的数据结构。索引可以分为多个分片,每个分片是一个独立的 Lucene 索引。分片可以分布在不同的服务器上,以增强 ES 的性能和可靠性。

查询: ES 支持多种查询类型:

  • 全文查询: 搜索文档中的文本内容。
  • 结构化查询: 搜索文档中的特定字段。
  • 组合查询: 将多个查询组合在一起。

Elasticsearch 操作过程

创建索引:

  1. 选择索引名称。
  2. 定义索引的字段映射。
  3. 将数据导入索引。

搜索索引:

  1. 创建一个搜索请求。
  2. 将搜索请求发送到 ES 集群。
  3. ES 集群返回搜索结果。

Springboot 集成 Elasticsearch

依赖引入:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

ES 配置:

spring.elasticsearch.rest.uris=http://localhost:9200

实体类创建:

@Document(indexName = "my-index")
public class MyEntity {

    @Id
    private String id;

    private String name;

    private int age;

}

使用 ES:

@Autowired
private ElasticsearchTemplate elasticsearchTemplate;

public void save(MyEntity entity) {
    elasticsearchTemplate.save(entity);
}

public List<MyEntity> search(String keyword) {
    Query query = new QueryStringQueryBuilder(keyword).build();
    SearchHits<MyEntity> searchHits = elasticsearchTemplate.search(query, MyEntity.class);
    return searchHits.getHits().stream().map(SearchHit::getContent).collect(Collectors.toList());
}

常见问题解答

1. ES 与 Solr 有何区别?

  • ES 和 Solr 都是开源搜索引擎,但 ES 采用 Lucene 作为其底层搜索引擎,而 Solr 则使用 Lucene 和 SolrCloud。
  • ES 强调分布式和可扩展性,而 Solr 更加专注于可定制性。

2. ES 是否支持 SQL 查询?

  • ES 原生不支持 SQL 查询。然而,可以使用诸如 Elasticsearch SQL 这样的插件来实现 SQL 查询功能。

3. ES 如何实现高可用性?

  • ES 通过副本分片来实现高可用性。副本分片是索引分片的复制品,如果主分片发生故障,则可以从副本分片中恢复数据。

4. ES 如何实现可扩展性?

  • ES 可以通过添加更多的节点(服务器)来实现水平扩展。每个节点都可以存储索引的一部分,并且 ES 会自动平衡负载以确保最佳性能。

5. ES 是否支持全文搜索?

  • 是的,ES 的核心功能之一就是全文搜索。它使用倒排索引来快速有效地搜索文档中的文本内容。