如何在 tarantool 中创建可按多个条件搜索的空间

how to create spaces in tarantool searchable on multiple criteria

我们的用例如下

我们将从来源获取文章。
每篇文章都有特定的 metadata.The 元数据有一个字段类别,它是文章可能属于的类别名称列表(手机、笔记本电脑等)into.Similarly 元数据有一个关键字字段,其中包含关键字列表文章可能会落入。

以下是我们可能需要的查询

a) 获取给定类别的所有文章并来自特定来源,location.Source 和位置是文章的元数据字段。
b) 获取给定类别、来源、位置的所有文章。 c) 获取给定类别、位置的所有文章。
d) 获取给定关键字、类别、位置的所有文章。

下面是我们如何设计 spaces.So 在获取每篇文章时,我们将文章插入 articles space 并插入 category_articles 和 keyword_articles space 基于这篇文章属于哪个类别和关键字。

以下是我对如何为给定查询模式高效创建二级索引的一些疑问。

a) 对于二级键 {category,source,location},如果我们错过了输入值中的某些部分,那么如果键的其他部分相等,行是否匹配? https://tarantool.org/doc/singlehtml.html#lua-data.index_object.parts
我知道我们不能在输入中指定第一部分和第三部分,即 {'category','location'} 作为键?或者我们应该在第二个位置有一个 nil。

b)我们能否以更好的方式对模式建模,以便有效地查询给定的模式。

文章

url散列
标题
内容
url
日期

主键:{url哈希}

--
category_articles

编号
类别
来源
位置
{url哈希,..}

主键:{id}
辅助键:{category,source,location}

--
keyword_articles

编号
关键词
类别
来源
位置
{url哈希,..}

主键:{id}
辅助键:{关键字、类别、来源、位置}

更新:
查询:
box.space.category_articles.index.secondary_key:select{'bollywoord',nil,'india'}
输出:

[1, 'bollywoord', 'ht', 'india', ['url1', 'url2']]
[3, 'bollywoord', 'ht', 'us', ['url3', 'url4']]

您需要将要用于搜索的所有字段都包含在索引中。您可以定义多个二级索引。例如。您可以在关键字、类别、来源上定义一个索引,在位置、类别、来源上定义另一个索引。除了主键之外,这些都是很好的组合。 您不能在 Tarantool 中搜索任意字段组合,除非您在其上建立索引。