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
相关推荐
朗心心理10 小时前
朗心科技:以数智化引领心理健康服务新标杆
大数据·人工智能·科技·心理健康·朗心科技·数智化心理育人·一站式心理中心建设
无忧智库10 小时前
破局与重构:大型集团化协同管理平台的全景式深度解构(PPT)
大数据
码云数智-大飞12 小时前
进程、线程与协程:并发模型的演进与 Go 语言的 GMP 革命
大数据
XiaoMu_00113 小时前
基于大数据的糖尿病数据分析可视化
大数据·数据挖掘·数据分析
阿里云大数据AI技术13 小时前
Celeborn 如何让 EMR Serverless Spark 的 Shuffle 舒心、放心、安心
大数据·spark
AI营销快线13 小时前
AI营销获客难?原圈科技深度解析SaaS系统增长之道
大数据·人工智能
星幻元宇VR14 小时前
VR环保学习机|科技助力绿色教育新模式
大数据·科技·学习·安全·vr·虚拟现实
CryptoPP14 小时前
开发者指南:构建实时期货黄金数据监控系统
大数据·数据结构·笔记·金融·区块链
ZGi.ai16 小时前
生产级 Agent 编排 从单一 LLM 调用到多智能体工作流的工程设计
大数据·数据库·人工智能
天远数科16 小时前
分布式系统实战:基于天远二手车估值API构建高可用车辆估值微服务
大数据·微服务·云原生·架构