我们决定将mongodb用于某些Web应用程序(而不是mysql),但希望继续使用sphinx来索引/搜索存储在mongodb中的所有数据。因为mongodb object-id是默认的哈希 - 我们希望保持这一点 - 现在使用sphinx存在一个问题。正如它在sphinx文档中所说:
所有文件ID必须是不可分配的非零整数 (32位或64位,依赖于建立时间设置)。
所以...什么是解决这个问题的最佳方法...我们如何将mongodb object-id映射到非零整数(和后面)?
更新
凯西的答案是正确的方向,但事实证明,字符串属性在当前的dev版本中,仅适用于sql数据源。对于xmlpipe,必须将补丁应用于结帐源。有关这方面的更多信息,请参阅sphinx forum。
答案 0 :(得分:28)
您不能将对象ID用作Sphinx文档ID - MongoDB对象ID大于Sphinx文档ID的最大大小。
相反,您可以在生成Sphinx要处理的XML时增加一个唯一ID(我假设您使用xmlpipe将Mongo数据导入Sphinx?)并将MongoDB对象ID存储为字符串属性狮身人面像。
您需要最新的Sphinx开发版才能执行此操作 - 请参阅我对此问题的回答以获取更多详细信息:Sphinx without using an auto_increment id