【问题标题】:how to create spaces in tarantool searchable on multiple criteria如何在 tarantool 中创建可根据多个条件搜索的空间
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这看起来比一些 hackish 解决方案更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多