我们决定将 mongodb 用于某些 Web 应用程序(而不是 mysql),但希望继续使用 sphinx 来索引/搜索存储在 mongodb 中的所有数据。由于 mongodb object-id 是默认的哈希值——我们希望保留它——现在使用 sphinx 存在一个问题。正如 sphinx 文档中所说:
ALL DOCUMENT IDS MUST BE UNIQUE UNSIGNED NON-ZERO INTEGER NUMBERS (32-BIT OR 64-BIT, DEPENDING ON BUILD TIME SETTINGS).
所以...解决此问题的最佳方法是什么...我们如何将 mongodb object-id 映射到非零整数(并返回)?
更新
casey 的答案是正确的研究方向,但事实证明,字符串属性在当前的开发版本中仅可用于 sql 数据源。对于 xmlpipe,有必要将补丁应用到结帐源。更多信息可以在 sphinx forum 中找到。 .
最佳答案
您不能将对象 ID 用作 Sphinx 文档 ID - MongoDB 对象 ID 大于 Sphinx 文档 ID 的最大大小。
相反,您可以在生成 Sphinx 将要处理的 XML 时增加一个唯一 ID(我假设您正在使用 xmlpipe 将 Mongo 数据导入 Sphinx?)并将 MongoDB 对象 ID 作为字符串属性存储在 sphinx 。
您需要最新的 Sphinx 开发版本才能执行此操作 - 请参阅我对此问题的回答以了解更多详细信息:Sphinx without using an auto_increment id
https://stackoverflow.com/questions/1680633/