0

文章是从 rss 提要中解析出来的,每篇文章都可能分为许多类别。此外,每篇文章都有一些元数据,例如来源、上游等。

下面是我们如何设计空间。每篇文章都插入到文章空间中。


文章空间

网址哈希 | 文章内容
abcdef | {虚拟内容}

主键 urlhash = hash(article.url)。


在 category_articles 空间中,我们根据文章所属的类别多次插入文章

category_articles

来源 | 类别 | 网址哈希 | 时间戳
英国广播公司 | 艺术 | 文章1 | 27777 英国
广播公司 | 移动 | 第 8 条 | 27777 英国
广播公司 | 电话 | 文章3 | 纽约时报 27778
| 声音 | 第七条 | 纽约时报 36667
| 扬声器 | 第七条 | 45556

主键 = {源、类别、urlhash}
辅助键 = {源、类别、时间戳}

我需要给定来源和可能类别的最新文章。以下是我构建查询的方式。

box.space.category_articles.index.secondary:select{{'nyt','speaker'},{ iterator = 'LE', limit = 5 }}

现在我将在结果中两次获得 article7。目前我正在过滤代码中的重复结果。我如何在 tarantool 中有 distinct(urlhash) 类型的选项。

4

2 回答 2

1

我能够使用索引上的 pair 函数找到更好的解决方案,然后过滤文章(使用 lua 表跟踪唯一的文章),直到获得唯一数量的文章。

index_object:pairs([key[, iterator-type]])

于 2017-07-13T08:22:57.680 回答
0

哪里有两种可能的选择

  1. 第一个是在客户端过滤所有内容。
  2. 第二个是使用 Lua 存储过程。一个例子:

    function select_with_distinct() local ca = box.space.category_articles for _, v in pairs(ca.index.secondary:select{ {'nyt','speaker'},{ iterator = 'LE', limit = 5 }})做 -- 过滤 ... end end

于 2017-05-18T21:33:00.793 回答