返回
ES:从入门到整合Springboot,一章直达!
后端
2023-08-08 16:15:08
Elasticsearch:全方位入门指南
了解 Elasticsearch
Elasticsearch(ES)是一种强大的开源搜索引擎,基于 Lucene 构建。它以其分布式、可扩展性和高性能著称,使其实现了前所未有的搜索体验。
Elasticsearch 的用武之地
ES 的应用场景十分广泛,包括但不限于:
- 网站搜索: 为网站提供快速且精确的搜索能力。
- 日志分析: 从日志文件中提取有价值的信息。
- 应用程序搜索: 为应用程序提供搜索功能,例如产品搜索、用户搜索等。
- 机器学习: 作为机器学习算法的特征工程工具,用于提取和转换数据。
Elasticsearch 与 MySQL 的比较
ES 和 MySQL 都是流行的数据库,但它们有着不同的用途和特性:
特性 | Elasticsearch | MySQL |
---|---|---|
数据模型 | 文档型 | 行列型 |
索引方式 | 倒排索引 | B+ 树索引 |
查询方式 | 全文检索 | 结构化查询 |
可扩展性 | 水平扩展 | 垂直扩展 |
高可用性 | 支持 | 不支持 |
实时性 | 支持 | 不支持 |
Elasticsearch 语法
文档: ES 中的数据存储在称为文档的 JSON 对象中。文档可以包含一个或多个字段,字段类型包括字符串、数字、布尔值、日期、数组和对象。
索引: 索引是 ES 中存储和检索文档的数据结构。索引可以分为多个分片,每个分片是一个独立的 Lucene 索引。分片可以分布在不同的服务器上,以增强 ES 的性能和可靠性。
查询: ES 支持多种查询类型:
- 全文查询: 搜索文档中的文本内容。
- 结构化查询: 搜索文档中的特定字段。
- 组合查询: 将多个查询组合在一起。
Elasticsearch 操作过程
创建索引:
- 选择索引名称。
- 定义索引的字段映射。
- 将数据导入索引。
搜索索引:
- 创建一个搜索请求。
- 将搜索请求发送到 ES 集群。
- 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 的核心功能之一就是全文搜索。它使用倒排索引来快速有效地搜索文档中的文本内容。