2

我正在寻找一种在 solr 文档上显示单个用户评分的策略。IE。用户可以在文档上给出 1-5 分,我想在他们搜索时将其呈现给他们。

我可以想到两种通用方法。

  1. 将评分存储在我的 RDBMS 中,并在获得 solr 结果后对其进行查询,并将数据合并到业务逻辑中。

  2. 不知何故,还会将此评级信息存储在 solr 中,以便它返回给定用户的数据。我能想到的只是带有用户 ID 和评级值的属性名称。

假设用户群很大,我担心方法 2 可能会失控。solr 文档可以有多“宽”?你能把数以万计的属性放在一个文档上吗?性能影响仍然会使方法 2 比对 sql db 的第二次命中(方法 1)更好吗?

还有其他我没有想到的方法吗?

4

3 回答 3

0

第三种选择可能是添加一个额外的 Solr 索引,该索引仅包含文档 ID、用户 ID 和用户归因于该文档的分数。然后按文档和用户查询分数将非常简单和快速。

于 2010-08-09T13:08:15.883 回答
0

我使用了方法 1。由于每个用户的评分数量很少(可能少于 1000),我只是在登录时缓存他们的所有评分并存储在内存中。然后,当显示 SOLR 结果时,只需在需要的地方应用评级就很快了。

这使您免于对每个结果进行数据库调用,并且不会过多地使服务器陷入困境。另外,当用户更新他们的评分时,您只需更新数据库并使缓存无效。您不必对 SOLR 文档进行 UPDATE 调用。

于 2010-08-09T18:42:58.247 回答
0

我会选择 2 号,并且只会定期更新评级。这样,您就可以将评分融入 Solr 计算的相关性分数中。

我认为这取决于您是否像 Digg/Reddit 那样,赞成/反对投票会极大地影响显示的内容,或者它是否只是评分的另一个因素,例如文档的新程度。如果这只是另一个因素,那么在安静的时间每天、每周或每月更新一次文档......

于 2010-08-10T20:05:14.187 回答