【发布时间】:2017-03-23 11:43:48
【问题描述】:
我们的用例如下
我们将从来源获取文章。
每篇文章都有一定的元数据。元数据有一个字段类别,它是文章可能属于的类别名称(手机、笔记本电脑等)的列表。类似地,元数据有一个关键字字段,其中包含文章可能属于的关键字列表.
以下是我们可能需要的查询
a) 获取给定类别的所有文章,并且来自某个来源、位置。来源和位置是文章的元数据字段。
b) 获取给定类别、来源、位置的所有文章。
c) 获取给定类别、位置的所有文章。
d) 获取给定关键字、类别、位置的所有文章。
下面是我们是如何设计空间的。所以在得到每篇文章后,我们将文章插入到articles空间,并根据这篇文章所属的类别和关键字插入到category_articles和keyword_articles空间.
以下是我对如何有效地为给定查询模式创建二级索引的几个查询。
a) 对于二级键 {category,source,location},如果我们遗漏了输入值中的某些部分,那么如果 key 的其他部分相等,行会匹配吗? https://tarantool.org/doc/singlehtml.html#lua-data.index_object.parts
我知道我们不能在输入中指定第一和第三部分,即 {'category','location'} 的键?或者我们在第二个位置有一个 nil。
b)我们能否以更好的方式对模式进行建模,以便有效地查询给定的模式。
文章
urlhash
标题
内容
网址
日期
主键:{urlhash}
--
category_articles
身份证
类别
来源
位置
{urlhash,..}
主键:{id}
辅助键:{类别、来源、位置}
--
keyword_articles
身份证
关键字
类别
来源
位置
{urlhash,..}
主键:{id}
辅助键:{关键字、类别、来源、位置}
更新:
查询:
box.space.category_articles.index.secondary_key:select{'bollywood',nil,'india'}
输出:
[1, '宝莱坞', 'ht', '印度', ['url1', 'url2']]
[3, '宝莱坞', 'ht', '我们', ['url3', 'url4']]
【问题讨论】:
标签: multiple-columns secondary-indexes tarantool nosql