Elasticsearch 索引创建与文档管理

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 性能优化建议

  1. 分页限制:默认分页大小为10,建议根据业务需求调整
  2. 字段筛选:仅返回需要的字段可减少网络传输
  3. 分词器选择:根据业务场景选择合适的分词策略
  4. 索引生命周期管理:定期清理过期数据

五、完整工作流示例

5.1 环境准备

xml 复制代码
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.83</version>
</dependency>

5.2 数据导入流程

  1. 查询数据库数据:
java 复制代码
List<Book> books = bookDao.selectAll();
  1. 构建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)
  );
}
  1. 执行批量导入:
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
相关推荐
2501_9336707933 分钟前
2026大学生必看!互联网行业含金量最高
大数据
Ulyanov1 小时前
像素迷宫:路径规划算法的可视化与实战
大数据·开发语言·python·算法
pride.li1 小时前
Git 笔记:将一段旧历史压缩成一个提交
大数据·elasticsearch·搜索引擎
数智化管理手记2 小时前
零基础认知精益生产——核心本质与必避误区
大数据·数据库·人工智能·低代码·制造
lifallen3 小时前
Flink Watermark 设计分析
java·大数据·flink
永霖光电_UVLED3 小时前
Cree LED 推出一款专为满足现代园艺和农业照明需求红光LED
大数据·汽车·制造·娱乐
萌>__<新3 小时前
Git常见使用命令及易踩坑点
大数据·elasticsearch·搜索引擎
TechMasterPlus4 小时前
Harness Engineer:把 AI 变成可复用工程能力的实践指南
大数据·人工智能
wydxry4 小时前
深入解析自适应光学中的哈特曼波前传感技术:原理、算法与智能化前沿
大数据·人工智能·算法
豆豆4 小时前
集团网站建设指南:站群架构如何平衡品牌统一与业务独立
大数据·人工智能·cms·网站建设·网站制作·建站·站群cms