用途:本技能提供使用 Redis Query Engine(RQE)对 Hash 或 JSON 文档建立索引与搜索的指导,覆盖模式设计、字段类型选择、查询语法、索引生命周期管理及常见性能陷阱。
适用时机:创建、修改或审查 RQE 索引(FT.CREATE、FT.ALTER);编写或优化 FT.SEARCH / FT.AGGREGATE 查询;为字段选择 TEXT、TAG、NUMERIC、GEO、GEOSHAPE 或 VECTOR;无停机上线新索引模式;建立仅覆盖新写入键的索引。
主要能力与要点:
- 使用 DIALECT 2 作为基线,其他方言(1、3、4)自 Redis 8 起已弃用;向量搜索必须使用 DIALECT 2。示例:FT.SEARCH idx:products "@name:laptop" DIALECT 2。
- 选择最窄的字段类型:TEXT 用于全文搜索(分词与词干化,不适合精确匹配);TAG 用于精确匹配与过滤(建议 SORTABLE UNF);NUMERIC 用于范围查询与排序;GEO 用于经纬度点查询;GEOSHAPE 用于多边形/区域查询;VECTOR 用于相似度搜索(HNSW 或 FLAT)。常见错误是用 TEXT 存类别或状态字段,TAG 快约 10 倍。
- 只索引需要查询的内容并始终设置 PREFIX,否则会索引所有匹配键,导致索引体积与写入延迟膨胀。示例:FT.CREATE idx:products ON HASH PREFIX 1 product: SCHEMA name TEXT WEIGHT 2.0 category TAG SORTABLE price NUMERIC SORTABLE location GEO。建议从最小模式开始,用 FT.INFO 监控索引大小,仅在需要排序的字段上使用 SORTABLE。
- 无停机更新索引:应用查询指向别名,替换底层索引。示例:FT.CREATE idx:products_v2 ... 后执行 FT.ALIASUPDATE products idx:products_v2,应用查询保持 FT.SEARCH products "@category:{electronics}"。管理命令包括 FT.INFO、FT.DROPINDEX、FT._LIST、FT.ALIASADD/UPDATE/DEL。
- SKIPINITIALSCAN 仅在历史数据无关时使用,例如新功能索引、历史数据过大无法同步扫描、仅索引未来事件流;多数模式迁移应保留默认全量扫描。
- 编写具体查询而非 *:先用过滤缩小结果集再分页或聚合。示例:FT.SEARCH idx:products "@category:{electronics} @price:[100 500]" LIMIT 0 20 RETURN 3 name price category。SORTBY 需要字段为 SORTABLE;尽早 LIMIT;用 RETURN 指定字段;慢查询可用 FT.PROFILE idx:<name> SEARCH QUERY "<query>" 分析。
限制:资料未提供具体性能基准、版本兼容细节或收费信息,暂未提供。