Sphinx沿三个向量而不是两个向量的唯一键

时间:2009-12-18 03:05:55

标签: ruby-on-rails math sphinx thinking-sphinx

我正在尝试在单个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)

但这会导致碰撞。

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

以为我要清理这个风滚草。有一个评论有点暗示,但我最终做的是一些变位。它有你可以拥有的实体数量的限制,但在我的例子中它是1024(我认为),这对我们来说是充足的:

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

基本上我们得到正常数字,将它移到左边(或右边)并在我们刚开放的空范围内添加entity_id。