我正在尝试在单个rails应用程序下托管的多个“站点”上实现思维 - 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)
但这会导致碰撞。
非常感谢任何帮助:)
答案 0 :(得分:0)
以为我要清理这个风滚草。有一个评论有点暗示,但我最终做的是一些变位。它有你可以拥有的实体数量的限制,但在我的例子中它是1024(我认为),这对我们来说是充足的:
((primary_key * total_models + current_model_offset) << 10) + entity_id
基本上我们得到正常数字,将它移到左边(或右边)并在我们刚开放的空范围内添加entity_id。