You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ignite是否支持为多值字段创建索引以提升查询性能?

Apache Ignite 集合类型字段索引相关说明

首先明确答案:Apache Ignite 完全支持为 List、Set、数组这类多值字段创建索引,能够大幅加速按集合内元素查询的请求效率,这种索引叫做多值索引(Multi-Value Index),实现逻辑和你提到的 MongoDB 数组索引类似。

索引创建方法

你可以通过两种方式创建多值索引:

  • 注解方式(Java 对象存储场景)
    在对应集合字段的 @QueryIndex 注解中开启 multiValue = true 配置即可,示例如下:

    // 缓存值对应的实体类
    public class Book {
        // 为authors集合字段配置多值索引
        @QueryIndex(multiValue = true)
        private List<String> authors;
        
        // 其他字段、getter、setter省略
    }
    
  • SQL DDL 方式
    直接执行带 MULTIVALUE 关键字的建索引语句即可:

    CREATE MULTIVALUE INDEX idx_book_authors ON Book(authors);
    

查询方法

你提到的“不知道怎么用SQL写这类查询”的问题也有对应的语法,使用 CONTAINS 函数即可匹配集合内的元素,示例查询语句:

-- 查询所有作者包含John的书籍
SELECT * FROM Book WHERE CONTAINS(authors, 'John');

上述查询会自动匹配我们创建的多值索引,避免全表扫描,性能远高于无索引场景。如果你的业务主要使用键值API,也可以通过 SqlFieldsQuery 执行上述查询拿到符合条件的记录主键,再通过主键拉取完整的缓存值即可。

注意事项

  • 多值索引仅支持元素为标量类型(字符串、数字、日期等可排序类型)的集合/数组
  • 不建议给单条记录元素数量过多(比如单条记录集合元素超过100个)的字段建多值索引,会导致索引存储量大幅膨胀。

内容的提问来源于stack exchange,提问作者Roman Puchkovskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 08:06:02