1

如果我有一个包含多个二级索引的表,如何生成交集?例如,如果我有一个带有“firstName”和“lastName”二级索引的用户表,并且希望所有用户名为“Bob Smith”:

r.table('users').getAll('Bob', {index: 'firstName'}).XXXX('Smith', {index: 'lastName'})

我可以使用过滤器,但我的理解是会慢一些:

r.table('users').getAll('Bob', {index: 'firstName'}).filter({'lastName': 'Smith'})

或者,我可以与复合索引进行交集吗?

4

2 回答 2

1

正确的方法是使用复合索引。例如:

table.index_create("fullName", lambda doc: [doc["firstName"], doc["lastName"])
table.getAll(["Bob", "Smith"])

您目前不能在单个查询中使用多个索引。Rethink 未来可能会支持这一点,但现在不支持。

于 2013-10-29T17:16:21.773 回答
0

正确的更新方法是基于 first_name 和 last_name 属性创建复合二级索引。在 JS 中更新的示例: r.table("users").indexCreate( "full_name", [r.row("last_name"), r.row("first_name")] ).run(conn, callback)

然后您的查询将类似于获取姓氏为 Smith 且名字为 John 的所有用户。 r.table("users").getAll(["Smith", "John"], {index: "full_name"}).run(conn, callback)

于 2016-04-15T14:41:14.770 回答