0

我正在尝试在单个 Rails 应用程序下托管的多个“站点”上实现thinking-sphinx。我正在与thinking-sphinx 的开发人员合作,对更精细的细节进行分类,并取得了不错的进展,但我需要一个数学问题的帮助:

通常在thinking-sphinx搜索索引中制作唯一ID的公式是取id,乘以可搜索模型的总数,再加上当前索引模型的数量:

id * total_models + current_model

这很好用,但现在我也通过一个 entity_id 进入组合,所以有三个 vextors 使这个 ID 唯一。有人可以帮我弄清楚使用这三个变量来保证 id 永远不会发生冲突的等式:

id, total_models, total_entities

实体 ID 是一个整数。

我想到了:

id * (total_models + total_entities) + (current_model + current_entity)

但这会导致碰撞。

任何帮助将不胜感激 :)

4

1 回答 1

0

我想我会清理这个风滚草。有一条评论有点暗示,但我最终做的是一些位移。它对您可以拥有的实体数量有其限制,但在我的示例中它是 1024(我认为),这对我们来说已经足够了:

((primary_key * total_models + current_model_offset) << 10) + entity_id

本质上,我们得到我们的正常数字,将其向左(或向右)移动,并在我们刚刚打开的空白范围内添加 entity_id。

于 2010-04-14T04:39:51.233 回答