
Elasticsearch 5 学习笔记及 Java 操作 ES 增删改查示例
5星
- 浏览量: 0
- 大小:None
- 文件类型:ZIP
简介:
本资料整理了Elasticsearch 5的学习笔记,并提供了Java代码示例用于操作ES进行数据的增删改查,适用于初学者快速入门。
**Elasticsearch 5 学习笔记**
Elasticsearch 是一个开源的全文搜索引擎,以其分布式、实时、灵活以及强大的数据分析能力而广受赞誉。在版本 5 中,Elasticsearch 强化了搜索性能,优化了 API,并引入了一些新特性。本笔记将围绕 Elasticsearch 5 的核心概念和功能展开,特别是对于仍然使用或需要了解 Elasticsearch 5 的用户来说,这些内容非常实用。
1. **核心概念**
- **索引(Index)**: 在Elasticsearch中,索引是一个存储文档的逻辑空间,类似于关系数据库中的表。
- **类型(Type)**: 类型是索引中的逻辑分类,尽管在 Elasticsearch 5 后已被弃用,在本笔记中仍然会提及以适应早期版本的使用场景。
- **文档(Document)**: 文档是存储在索引中的 JSON 对象,是Elasticsearch处理的基本单元。
- **节点(Node)**: 节点是运行 Elasticsearch 实例的服务器;多个节点可以组成一个集群。
- **集群(Cluster)**: 集群是一组共享相同配置并协同工作的节点,共同存储和处理数据。
2. **数据操作**
- **创建索引**:使用 `PUT` 请求来创建一个新的索引,例如 `PUT my_index`。
- **添加文档**:通过 `POST` 或 `PUT` 请求将文档添加到指定的类型中,如 `POST my_index/doc/1` 或者 `PUT my_index/doc/2`。
- **查询文档**: 使用 `GET` 请求获取文档,如 `GET /my_index/_search?q=field:value`
- **更新文档**:通过使用 `_update` 操作来部分更新一个文档的内容。
- **删除文档**:用 `DELETE` 请求删除指定的文档,例如 `DELETE my_index/doc/1`
- **删除索引**: 使用 `DELETE` 请求彻底移除整个索引,如 `DELETE /my_index`
3. **Java API 连接与操作**
- **连接**:使用 TransportClient 或 RestHighLevelClient 建立和 Elasticsearch 节点的连接。
- **创建索引**:通过调用 `client.admin().indices().prepareCreate()` 方法来创建一个新的索引
- **添加文档**: 使用 `IndexRequest` 类生成一个请求,然后利用 `client.index()` 执行该操作
- **查询**:使用 SearchRequest 和 SearchResponse 来执行搜索任务;QueryBuilder 用于构建具体的查询条件。
- **更新**: 利用 UpdateRequest 进行部分文档内容的修改,并通过调用 `client.update()` 完成更新动作
- **删除**: 使用 DeleteRequest 类来生成一个删除请求,然后使用 `client.delete()` 执行实际的删除操作。
4. **搜索功能**
- **全文检索**:Elasticsearch 支持基于 TF-IDF 的全文检索,能够快速定位相关文档。
- **聚合分析**:提供一系列强大的聚合函数(如 terms、histogram 等)来执行数据统计和分析工作
- **过滤与排序**: 通过使用 `must`、`should` 和 `not` 这样的布尔操作符来进行条件筛选,同时也可以利用 `sort` 参数实现对结果的排序。
5. **分布式特性**
- **自动分片及副本管理**:数据会根据需要被分散到多个节点上以提高可用性和容错性
- **路由和负载均衡**: 内置的路由算法确保了数据均匀分布,而负载平衡器则负责请求分配
6. **性能优化**
- **映射配置**:通过选择合适的字段类型及分析器(例如使用 `not_analyzed` 字段实现精确匹配)来提高系统效率
- **索引设置**: 适当调整分片数、副本数量等参数,以达到存储和查询速度之间的平衡。
- **刷新策略**: 控制索引的刷新频率有助于优化写入性能。
**Java 对 Elasticsearch 的增删改查示例**
Java API 提供了丰富的接口来与Elasticsearch进行交互。以下是一些基本操作的示例代码:
```java
创建TransportClient或RestHighLevelClient
TransportClient client = new PreBuiltTransportClient(Settings.builder().build())
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(localhost), 9300));
创建索引
client.admin().indices().prepareCreate(my_index).execute().actionGet();
添加文档
Map
全部评论 (0)


