如何为 "contains" 查询使用二级索引
How to use secondary indexes for a "contains" query
Rethinkdb 文档有这个示例来改进 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");
});
也许我们可以做到这一点
r.table("users").getAll([1, "tent"]).filter(function (user) {
return user("equipment").contains("tent2");
});
所以像你一样构建一个多索引,首先尝试getAll
,这样部分索引是有效的,然后filter
继续确保equipment
包含我们的数组想。
Rethinkdb 文档有这个示例来改进 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");
});
也许我们可以做到这一点
r.table("users").getAll([1, "tent"]).filter(function (user) {
return user("equipment").contains("tent2");
});
所以像你一样构建一个多索引,首先尝试getAll
,这样部分索引是有效的,然后filter
继续确保equipment
包含我们的数组想。