繁体   English   中英

Arangodb 创建集合索引

[英]Arangodb create index of set

是否可以在 Arangodb 中创建集合的索引?

我有以下 class:

public class Entity {
    private String key;
    private Set<String> projectKeys;

    // Getter, Setter, ...
}

假设实体{key: "1", projectKeys: ["1", "2"]}{key: "2", projectKeys: ["2", "3"]}存储在数据库中。
现在我想搜索projectKey中包含值3的所有实体。 这可以通过以下方式完成:

arangoDb.query(
                "FOR e in @@collection " +
                        "FILTER @projectKey IN e.projectKeys  " +
                        "RETURN e",
                Map.of("@collection", "Entity",
                        "projectKey", projectKey),
                Entity.class)
                .asListRemaining();

我的问题是是否可以在该集合上创建一个索引,如下所示:

// projectKey -> Entity
1 -> entity1
2 -> entity1, entity2
3 -> entity2

如果是,我该怎么做?

是的,这可以通过数组索引来实现。 这是文档的摘录:

索引数组值——

如果索引属性包含数组,ArangoDB 默认将整个数组存储为索引值。 以这种方式无法通过索引访问数组的各个成员。

要使索引将单个数组成员插入索引而不是整个数组值,需要为属性创建一个特殊的数组索引。 可以使用collection.ensureIndex() function 像常规 hash 或跳过列表索引一样设置数组索引。 要使 hash 或 skiplist 索引成为数组索引,在创建索引和使用IN运算符在 AQL 查询中进行过滤时,需要使用[*]扩展索引属性名称。

以下示例在名为 posts 的集合中的 tags 属性上创建数组 hash 索引:

 db.posts.ensureIndex({ type: "hash", fields: [ "tags[*]" ] }); db.posts.insert({ tags: [ "foobar", "baz", "quux" ] });

然后可以使用此数组索引通过IN运算符从 AQL 查询中查找单个tags值:

 FOR doc IN posts FILTER 'foobar' IN doc.tags RETURN doc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM