如何使用二级索引进行“包含”查询

时间:2015-12-01 12:41:45

标签: rethinkdb

Rethinkdb docs有这个例子来改进带有二级索引的getAll / contains查询:

// Create the index
r.table("users").indexCreate("userEquipment", function(user) {
    return user("equipment").map(function(equipment) {
        return [ user("id"), equipment ];
    });
}, {multi: true}).run(conn, callback);

// Query equivalent to:
// r.table("users").getAll(1).filter(function (user) {
//     return user("equipment").contains("tent");
// });
r.table("users").getAll([1, "tent"], {index: "userEquipment"}).distinct().run(conn, callback);

我的问题是,是否有办法做同样的事情但是要查询多个标签。使用二级索引可以使这个查询成为可能吗?

r.table("users").getAll(1).filter(function (user) {
    return user("equipment").contains("tent", "tent2");
});

1 个答案:

答案 0 :(得分:1)

可能我们可以做到这一点

r.table("users").getAll([1, "tent"]).filter(function (user) {
    return user("equipment").contains("tent2");
});

所以像你一样构建一个多索引,并首先尝试getAll,这样该部分对索引有效,然后filter继续确保equipment包含我们想要的数组。