Elasticsearch 索引创建与文档管理
一、索引创建与配置
1.1 索引参数设置
在创建索引时,必须配置以下核心参数:
java
PUT /book_index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"analysis": {
"analyzer": {
"ik_analyzer": {
"type": "ik_max_word"
}
}
}
},
"mappings": {
"properties": {
"title": { "type": "text", "analyzer": "ik_analyzer" },
"author": { "type": "keyword" },
"content": { "type": "text", "analyzer": "ik_analyzer" }
}
}
}
1.2 分词器配置
- IK 分词器 :支持中文分词,可配置为
ik_max_word
(最大分词)或ik_smart
(最小分词) - 字段类型 :
text
:全文本字段,支持分词搜索keyword
:精确匹配字段,用于聚合和排序date
:日期类型字段numeric
:数值类型字段
二、文档操作实践
2.1 单文档添加
java
POST /book_index/_doc/1
{
"title": "Elasticsearch实战",
"author": "张三",
"content": "本书系统讲解了Elasticsearch的核心概念..."
}
2.2 批量文档添加 (Bulk API)
java
POST /_bulk
{
"index": { "_index": "book_index", "_id": "1" }
"document": {
"title": "Elasticsearch实战",
"author": "张三",
"content": "本书系统讲解了Elasticsearch的核心概念..."
}
}
2.3 文档删除
java
DELETE /book_index/_doc/1
三、数据转换与处理
3.1 对象转JSON
使用 FastJSON 库进行对象转换:
java
Book book = new Book();
book.setId(1);
book.setTitle("Elasticsearch实战");
String json = JSON.toJSONString(book);
3.2 数据查询
java
GET /book_index/_search
{
"query": {
"match": {
"content": "Elasticsearch"
}
},
"size": 10
}
四、高级操作与优化
4.1 分页查询
java
GET /book_index/_search
{
"query": {
"match_all": {}
},
"size": 10,
"from": 0
}
4.2 性能优化建议
- 分页限制:默认分页大小为10,建议根据业务需求调整
- 字段筛选:仅返回需要的字段可减少网络传输
- 分词器选择:根据业务场景选择合适的分词策略
- 索引生命周期管理:定期清理过期数据
五、完整工作流示例
5.1 环境准备
xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
5.2 数据导入流程
- 查询数据库数据:
java
List<Book> books = bookDao.selectAll();
- 构建Bulk请求:
java
BulkRequest bulkRequest = new BulkRequest();
for (Book book : books) {
bulkRequest.add(
new IndexRequest("book_index")
.id(String.valueOf(book.getId()))
.source(JSON.toJSONString(book), StandardCharsets.UTF_8)
);
}
- 执行批量导入:
java
client.bulk(bulkRequest, RequestOptions.DEFAULT);
六、常见问题处理
6.1 分词器配置错误
- 检查
settings.analysis.analyzer
配置 - 确认字段类型是否匹配分词器要求
6.2 文档无法检索
- 验证索引是否成功创建
- 检查字段映射类型是否与查询条件匹配
- 确认数据是否已成功写入
6.3 性能瓶颈处理
- 增加分片数量(根据数据量)
- 优化字段类型配置
- 启用副本分片提高读取性能
七、附录
7.1 常用REST API
操作类型 | 请求方法 | 示例 |
---|---|---|
创建索引 | PUT | PUT /book_index |
添加文档 | POST | POST /book_index/_doc/1 |
查询数据 | GET | GET /book_index/_search |
删除文档 | DELETE | DELETE /book_index/_doc/1 |
7.2 字段类型对照表
字段类型 | 说明 | 示例 |
---|---|---|
text | 全文搜索 | "content": "..." |
keyword | 精确匹配 | "author": "张三" |
date | 日期类型 | "publish_date": "2023-01-01" |
integer | 整数类型 | "page_count": 300 |