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
相关推荐
pingao14137820 分钟前
太阳总辐射传感器:能源、气象领域的关键测量工具
大数据·能源
百***78751 小时前
Grok-4.1技术深度解析:双版本架构突破与Python API快速集成指南
大数据·python·架构
Francek Chen3 小时前
【大数据基础】大数据处理架构Hadoop:01 Hadoop概述
大数据·hadoop·分布式·架构
互联网科技看点3 小时前
诸葛io获认可:金融分析智能体赛道领航者
大数据·人工智能·金融
2301_800256114 小时前
全球气候与环境变化考试知识点梳理(1)
大数据·人工智能
edisao4 小时前
六、 读者高频疑问解答 & 架构价值延伸
大数据·开发语言·人工智能·科技·架构·php
-大头.4 小时前
GIT教程系列(共3篇)---------第二篇:Git高级协作与团队实战完全指南
大数据·git·elasticsearch
gsls2008085 小时前
jenkins插件 Publish Over SSH 离线下载安装配置
ubuntu·ssh·jenkins·插件·离线
北京地铁1号线5 小时前
2.2 向量数据库
数据库·elasticsearch·milvus·faiss·向量数据库·hnsw
HXDGCL5 小时前
大会观察 | 破除创新链堵点:论“工厂直供”模式如何加速自动化核心部件迭代
大数据·人工智能·自动化·自动化生产线·环形导轨