ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Redis OM Spring 索引注解完全指南:@Indexed/@Searchable/@GeoIndexed 一文掌握

2026/8/18 18:24:10 拓冰建站 浏览量
Redis OM Spring 索引注解完全指南:@Indexed/@Searchable/@GeoIndexed 一文掌握 Redis OM Spring 索引注解完全指南Indexed/Searchable/GeoIndexed 一文掌握【免费下载链接】redis-om-springSpring Data Redis extensions for better search, documents models, and more项目地址: https://gitcode.com/gh_mirrors/re/redis-om-spring你是否在 Spring Boot 项目里用过 Redis却只能靠手动拼 Key、自己写搜索逻辑Redis OM Spring正是为解决这个问题而生的开源框架——它是 Spring Data Redis 的扩展让你像写 JPA 一样用注解轻松完成全文搜索、文档模型、地理检索、向量相似度搜索。而这一切的起点就是本文要讲的三大核心索引注解Indexed、Searchable和GeoIndexed。掌握它们你就能用几行注解换来 Redis 查询引擎原 RediSearch的完整能力。什么是 Redis OM Spring 索引注解一文看懂原理在 Redis OM Spring 中实体类字段默认是不建立索引的。只有给字段加上索引注解Redis 查询引擎才会为该字段创建索引结构之后你的 Repository 方法如findByName才能被翻译成高效的查询命令。框架会根据你选择的注解自动在应用启动时生成对应的索引全程零手写命令。索引注解的源码位于 annotations 包你可以在 Indexed.java、Searchable.java 中查看它们的完整配置项。Indexed自动检测的万能索引注解Indexed是使用频率最高的注解它的杀手锏是类型自动检测AUTODETECT你只需要标注字段框架会根据 Java 类型自动选择索引方式一个注解通吃绝大多数场景。Document public class Company { Id private String id; Indexed // String 字段 → TAG 索引 private String email; Indexed // Integer 字段 → NUMERIC 索引 private Integer yearFounded; Indexed // Point 字段 → GEO 索引 private Point location; Indexed // SetString → TAG 索引多值 private SetString tags; }Indexed 支持的字段类型速查表Java 类型自动生成的索引类型典型查询场景StringTAG精确匹配、过滤Integer/Long/Double等数值NUMERIC范围查询、排序Date/LocalDate等日期NUMERIC时间范围筛选PointGEO距离检索Set/List集合TAG多值标签匹配float[]/byte[]VECTOR向量相似度搜索 真实案例官方演示项目 roms-documents 的 Company.java 就同时使用了Indexed处理地理位置、员工人数、成立年份和标签集合。Indexed 高频配置项配置项作用默认值sortable是否可排序额外消耗内存falsealias查询时使用的字段别名空fieldName自定义索引中的字段名Java 字段名indexMissing是否索引 null 值支持IsNull查询falseindexEmpty是否索引空字符串falselexicographic开启字符串范围查询能力false其中lexicographic true值得一提开启后框架会额外维护一个有序集合让你可以用findBySkuGreaterThan(ABC123)、findBySkuBetween(A,Z)这样的方法对字符串做字典序范围查询非常适合 SKU、版本号、ID 区间等场景。Searchable全文搜索的利器如果说Indexed解决找得到那Searchable就是解决搜得好。它把字段建成TEXT 索引支持分词、词干提取Stemming、加权打分等全文搜索能力。Document(games) public class Game { Id private String asin; Searchable(sortable true, weight 2.0) private String title; // 权重更高标题命中排序更靠前 Searchable(nostem true) private String brand; // 品牌名不做词干处理避免误匹配 }Searchable 核心配置项weight字段权重默认 1.0调高可让该字段的命中在结果排序中更靠前sortable开启后可按该字段排序nostem关闭词干提取适合专有名词、品牌、代码phonetic开启语音匹配如 Double Metaphone可模糊匹配发音相似的词indexMissing/indexEmpty支持对 null 和空字符串的查询全文搜索与普通字段过滤配合使用就是经典的**混合搜索Hybrid Search**方案。参考演示项目 roms-hybrid 的 Product.java它用Searchable做描述全文检索同时用Indexed做分类过滤和价格区间还叠加了向量字段做语义搜索。GeoIndexed地理位置的精确检索做外卖、出行、门店导航类应用GeoIndexed就是为你准备的。它专门针对地理位置字段org.springframework.data.geo.Point建立GEO 索引让找附近变成一条查询。import org.springframework.data.geo.Point; Document public class Company { Id private String id; GeoIndexed private Point location; // 经度、纬度 }之后在 Repository 中就能直接写findByLocationNear(Point, Distance)这样的方法实现方圆 5 公里内的公司之类的需求。需要注意GeoIndexed只提供fieldName、alias、noindex三个简单配置项更复杂的 GEO 场景如距离排序由查询层配合完成。实际上用Indexed标注Point字段效果完全等价GeoIndexed胜在语义清晰、代码自解释。其他索引注解速查一张表掌握全家桶除了三大主角Redis OM Spring 还提供了一批专用注解帮你更精确地表达意图注解用途一句话总结TagIndexed分类、状态等枚举型字段精确匹配 多值分隔separator可自定义分隔符NumericIndexed价格、库存等数值字段显式数值索引支持范围与排序TextIndexed与Searchable等价全文搜索的另一种写法VectorIndexed向量字段embeddings语义搜索、相似推荐需配置维度与算法IndexingOptions类级别索引配置停用词、语言、索引前缀等全局设置官方对这些注解的完整说明参见文档 index-annotations.adoc。进阶技巧索引注解的 3 个实战经验1. 用 indexMissing 精确处理 null 值默认情况下 null 值不会被索引导致findByTitleIsNull()查询不到记录。在字段上加上indexMissing true需 Redis Stack 2.10即可让 null 值参与索引从而精确区分字段缺失和字段为 null。2. 控制索引创建时机索引默认在应用启动时自动创建CREATE_IF_NOT_EXIST。你可以在Document上通过indexCreationMode切换模式RECREATE_INDEXES每次启动重建或NO_CREATE_NO_DROP完全手动管理。详见文档 index-creation.adoc。3. 只索引需要查询的字段每个索引都要消耗内存和写入开销。请克制地使用sortable true会显著增加内存只给真正参与查询、排序的字段加索引——这是性能优化的第一原则。最佳实践如何选择索引注解一句话总结选型策略通用场景→Indexed自动检测够用且简单全文搜索→Searchable分词、加权、语音匹配分类精确过滤→TagIndexed价格等数值范围→NumericIndexed地理位置→GeoIndexedAI 语义检索→VectorIndexed或Indexed的 VECTOR 配置索引注解只是第一步配上框架自动生成的 Repository 与元模型Metamodel你就能以类型安全的方式写出所有查询——这就是 Redis OM Spring 让 Java 开发者告别手写 Redis 命令的底气。建议你克隆官方仓库git clone https://gitcode.com/gh_mirrors/re/redis-om-spring在demos/目录下对照本文跑一遍 roms-documents、roms-hybrid 等示例亲手感受注解带来的开发效率提升✨【免费下载链接】redis-om-springSpring Data Redis extensions for better search, documents models, and more项目地址: https://gitcode.com/gh_mirrors/re/redis-om-spring创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考