gpt4 book ai didi

redis - 如何将排序集与特定分数相交?

转载 作者:IT王子 更新时间:2023-10-29 06:14:55 26 4
gpt4 key购买 nike

tl: 博士;我可以在两个排序集之间进行交集,但只能对具有指定分数的字段进行交集吗?
例如:

ZADD zset1 1 "first"
ZADD zset1 2 "second"
ZADD zset2 1 "first"
ZADD zset2 2 "second"

<command_that_I_need> <score> 2 zset1 zset2

得分为 1 时,将返回:

1 "first"

我为什么要这样做?

为什么?我需要先解释一些事情。

在我的模型中,有 users , 可以创建 articles .
每个article关联到 article_id .

我想让任何人都能搜索文章 titles ,并可选择指定 user .我通过将查询拆分为单词并找到哪个 articles 来想到这一点包含这些词。

我之所以能够做到这一点,是因为我以这种方式存储了这些信息:

zadd search_words:<word> <user_id> <article_id>

每次创建文章时,其标题都会拆分为 words .对于每个 wordwords ,我创建了那个排序集。

那样的话,我会用单词拆分每个查询,并与 search_words:<word> 相交排序集。 我确实想按分数过滤,因为这样我就可以按 user_id 过滤.

注意:由于文章也有内容,我知道用户希望搜索查看内容,但这超出了我的项目范围,因此我暂时忽略了。
注2:有没有更好的解决办法?

最佳答案

在这种情况下,没有一个命令可以执行您的命令。一种解决方法是首先对所有集合执行 ZINTERSTORE,然后对结果执行 ZRANGEBYSCORE 以按您的 user_id 进行过滤。

注意 2:您使用排序集的分数是可以接受的,因为显然 user_id 是数字。但是,更简单的方法是使用常规集。您可以继续对单词和文章使用相同的机制,但不是将 article_id<->user_id 关系存储在分数中,而是为每个用户使用一个专用集,例如:

SADD articles:<user_id> <article_id>

然后,要针对特定​​词和用户查询文章,只需像这样SINTER[STORE]:

SINTER articles:<user_id> search_words:<word1> search_words:<word2>...

关于redis - 如何将排序集与特定分数相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com