[英]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.