当前位置: 首页 > 知识库问答 >
问题:

通过二级索引从Tarantool中选择,通过另一个字段排序并限制/偏移

张兴旺
2023-03-14

我有一些空间顶部与字段:
-id,
-状态,
-评级

我对space top有两个索引:

--primary  
box.space.top:create_index('primary', { type = 'TREE', unique = true, parts = { 1, 'NUM' } })
--status
box.space.top:create_index('status', { type = 'TREE', unique = false, parts = { 2, 'NUM' } })

我可以按id或状态进行选择

--select by id 
space.top.index.primary:select(someId) 
--select by status with limit/offset 
space.top.index.status:select({someStatus}, {iterator = box.index.EQ, offset = 0, limit = 20})

有时我需要按状态选择,按等级排序。
什么是最好的方法?创建另一个索引与零件状态,评级,并使一些棘手的查询,如果可能的话?或者继续按状态选择,并在Lua过程中按等级进行排序?谢谢!

UPD:谢谢,克斯特亚!我这样修改索引状态:

box.space.top:create_index('status_rating', { type = 'TREE', unique = false, parts = { 2, 'NUM', 3 'NUM' } })

现在我可以问:

local active_status = 1 
local limit = 20 
local offset = 0
box.space.top.index.status_rating:select({active_status}, {iterator = box.index.LE, offset=offset, limit=limit})

伟大的

共有2个答案

南宫保臣
2023-03-14

与GE/LE迭代器和部分索引的调用可能不如预期地工作,因为没有匹配元组或限制太高。

假设,我们有以下元组(状态,评级):

{ 1, 1 }
{ 3, 1 }
{ 3, 2 }

比打电话

box.space.top.index.status_rating:select({2}, {iterator = box.index.GE, limit=1}) 

将返回元组{3,1},因为它大于{2}

然后打电话

box.space.top.index.status_rating:select({1}, {iterator = box.index.GE, limit=2})

将返回两个元组{1,1},{3,1}

在这两种情况下,元组{3,1}可能是不需要的

勾安翔
2023-03-14

创建第三个索引没有意义,如果需要按评级排序,只需将其作为第二部分包含在第二个索引中,并使用GE/GT迭代器,数据将按顺序显示。这是一个内存中的数据库,向索引中添加更多部分不会占用更多内存,只会稍微降低插入速度。

 类似资料:
  • 我有太空人: id 姓名 年龄 有两个索引: 和数据: 我需要按姓名和年龄选择的人,而不是一些价值。例如,我想选择所有有年龄的“亚历克斯” 我尝试执行查询: 但是得到结果 如何对名称和年龄索引部分使用不同的迭代器?

  • 问题内容: 假设我有一个自定义类的数组,每个类都包含一个名为 我还有一个任意值数组,称为,如下所示: 我的目标是对所有QB 进行排序,然后再对所有WR,RB和TE 进行排序。 我当前的操作方式是遍历中的每个元素,然后遍历所有播放器以附加到新数组。但是,我想不出一种更简单(更有效)的方法来做到这一点。非常感谢任何提示或指示。谢谢。 问题答案: 编辑: 我原来的方法是狗屎。这篇文章吸引了很多人的注意力

  • 我看到Spring Data中的从多个表中选择已经有了多个表的解决方案。我想知道是否可以在Spring JPA/Data中同时编写具有可分页和排序功能的表的自定义查询。 提前谢谢你的帮助。

  • 问题内容: 我有以下型号: 在管理界面中,当创建新演示时,在用户从下拉列表中选择类别之后,我想限制“项目”下拉列表中的选择数量。如果用户选择其他类别,则项目选择应相应更新。我想在客户端上限制项目选择,甚至在服务器上进行表单验证之前。这是为了提高可用性,因为项目列表可能超过1000个,能够按类别缩小范围将有助于使其更易于管理。 是这样做的“捷径”还是自定义JavaScript是这里的唯一选择? 问题

  • 问题内容: 我想要一个带有计算字段的模型,可以将其应用于排序。例如,假设我有以下模型: 我想要一个D和E字段,这些字段由以下公式计算得出: D = A-B E = A-X(其中X是模型C相关记录的字段) 如果我不需要应用排序,则实现此操作将很简单。我只是将属性添加到模型类。但是,我需要按这些字段排序。 一种解决方案是将所有记录提取到内存中并在那里进行排序,我认为这是不得已的方法(这会破坏有关分页的

  • 我有一份这样的ES文档 我正在使用Spring数据通过存储库接口与ES对话 现在我需要构建一个rest接口来响应这样的JSON格式数据 由于中的和非常大,因此从ES中检索所有字段非常昂贵。 我知道ES有一个名为“响应过滤”的功能可以满足我的要求,但我没有找到在Spring Data中使用它的方法。 如何在spring数据中实现这一点?