Elasticsearch5学习笔记和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`或`PUT my_index/_doc/1`。 - **查询文档**: 使用`GET`请求获取文档,如`GET my_index/_doc/1`。 - **更新文档**: 通过`POST`请求的 `_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<String, Object> doc = new HashMap<>(); doc.put("field1", "value1"); IndexRequest indexRequest = new IndexRequest("my_index", "_doc").source(doc); client.index(indexRequest).actionGet(); // 查询文档 SearchResponse response = client.prepareSearch("my_index") .setQuery(QueryBuilders.matchQuery("field1", "value1")) .execute().actionGet(); SearchHit hit = response.getHits().getAt(0); // 更新文档 UpdateRequest updateRequest = new UpdateRequest("my_index", "_doc", "1"); updateRequest.doc(jsonBuilder().startObject().field("field1", "new_value1").endObject()); client.update(updateRequest).actionGet(); // 删除文档 client.delete(new DeleteRequest("my_index", "_doc", "1")).actionGet(); // 关闭客户端 client.close(); ``` 以上就是关于Elasticsearch 5 的学习笔记和使用Java进行数据操作的示例。这些知识将帮助你理解如何在实际项目中有效地利用Elasticsearch进行数据存储和检索。
- 1
- 粉丝: 5622
- 资源: 674
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助