1

我们的用例如下

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

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

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

下面是我们如何设计空间。因此,在获取每篇文章后,我们将文章插入文章空间,并根据该文章所属的类别和关键字插入到 category_articles 和 keyword_articles 空间。

以下是我对如何有效地为给定查询模式创建二级索引的几个查询。

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

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

文章

urlhash
标题
内容
url
日期

主键:{urlhash}

--
category_articles

id
类别

位置
{urlhash,..}

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

--keyword_articles _

id
关键字
类别

位置
{urlhash,..}

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

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

[1, '宝莱坞', 'ht', '印度', ['url1', 'url2']]
[3, '宝莱坞', 'ht', '我们', ['url3', 'url4']]

4

1 回答 1

2

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

于 2017-03-24T06:10:17.137 回答