Easy-ES项目索引创建指南:两种高效创建Elasticsearch索引的方法
【免费下载链接】easy-es 项目地址: https://gitcode.com/gh_mirrors/eas/easy-es
前言
在使用Elasticsearch进行开发时,索引的创建是基础且关键的一步。Easy-ES项目提供了简单易用的API来帮助开发者快速创建索引。本文将详细介绍Easy-ES中创建索引的两种方式,帮助开发者根据实际需求选择最适合的方法。
方式一:基于实体类注解一键创建(推荐)
核心优势
这种方式通过实体类注解自动完成索引创建,具有以下优点:
- 代码简洁,开发效率高
- 维护方便,索引配置与实体类紧密结合
- 适合99.9%的常规业务场景
实现步骤
- 定义实体类:使用注解配置索引属性
@Data
@TableName(shardsNum = 3, replicasNum = 2, keepGlobalPrefix = true)
public class Document {
@TableId(type = IdType.CUSTOMIZE)
private String id;
private String title;
@HighLight(mappingField = "highlightContent")
@TableField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD)
private String content;
// 其他字段...
}
- 执行创建:通过Mapper接口一键创建
@Test
public void testCreateIndexByEntity() {
documentMapper.createIndex();
}
注解详解
-
@TableName:类级别注解,配置索引基本信息shardsNum:分片数量replicasNum:副本数量keepGlobalPrefix:是否保持全局前缀
-
@TableId:标识主键字段type:支持自定义ID类型
-
@TableField:字段级别注解fieldType:字段类型(TEXT、KEYWORD等)analyzer:索引分词器searchAnalyzer:查询分词器
-
@HighLight:高亮字段配置
方式二:通过API灵活创建(高级用法)
适用场景
这种方式提供了最大的灵活性,适合以下情况:
- 需要动态创建索引
- 有特殊的分词器需求
- 需要复杂的mapping配置
- 仅占0.01%的特殊业务场景
实现示例
@Test
public void testCreatIndex() {
LambdaEsIndexWrapper<Document> wrapper = new LambdaEsIndexWrapper<>();
wrapper.indexName("document");
// 字段映射配置
wrapper.mapping(Document::getTitle, FieldType.KEYWORD)
.mapping(Document::getContent, FieldType.TEXT, Analyzer.IK_MAX_WORD, Analyzer.IK_MAX_WORD);
// 分片配置
wrapper.settings(3, 2);
// 别名配置
wrapper.createAlias("daily");
// 执行创建
boolean isOk = documentMapper.createIndex(wrapper);
Assert.assertTrue(isOk);
}
高级配置选项
- 自定义mapping:
Map<String, Object> customMapping = new HashMap<>();
// 构建复杂的mapping结构
wrapper.mapping(customMapping);
- 自定义settings:
Settings customSettings = ...;
wrapper.settings(customSettings);
最佳实践建议
-
索引规划:
- 提前设计好分片数量和副本数量
- 考虑数据增长趋势设置合理的分片数
- 生产环境建议至少1个副本
-
字段类型选择:
- 需要全文搜索的字段使用TEXT类型
- 需要精确匹配的字段使用KEYWORD类型
- 数值类型选择对应的数值字段类型
-
分词器选择:
- 中文内容推荐使用IK分词器
- 根据业务需求选择IK_SMART或IK_MAX_WORD
- 确保索引和查询使用相同的分词器
-
索引修改策略:
- 尽量避免直接修改已有索引
- 使用别名机制实现索引的无缝切换
- 必须修改时考虑重建索引方案
常见问题解答
Q:为什么id字段不需要创建索引? A:Elasticsearch会为每个文档自动创建_id字段作为唯一标识,无需额外索引。
Q:如何修改已有索引的mapping? A:推荐通过创建新索引+别名切换的方式实现,直接修改可能影响现有数据。
Q:分片数量设置多少合适? A:一般建议每个分片大小在10-50GB之间,可根据数据量预估。
总结
Easy-ES提供了两种创建Elasticsearch索引的方式,满足不同场景需求。对于大多数业务场景,推荐使用基于注解的一键创建方式,简单高效;对于特殊需求,可以使用API方式灵活配置。无论选择哪种方式,都建议在创建索引前做好充分的规划设计,避免后期修改带来的麻烦。
【免费下载链接】easy-es 项目地址: https://gitcode.com/gh_mirrors/eas/easy-es
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



