26

我们决定将 mongodb 用于某些 Web 应用程序(而不是 mysql),但希望继续使用 sphinx 来索引/搜索存储在 mongodb 中的所有数据。由于 mongodb object-id 是默认的哈希值——我们希望保留它——现在使用 sphinx 存在一个问题。正如狮身人面像文档中所说:

所有文档 ID 必须是唯一的无符号非零整数(32 位或 64 位,取决于构建时间设置)。

所以......解决这个问题的最佳方法是什么......我们如何将mongodb object-id映射到非零整数(并返回)?

更新

casey 的答案是正确的研究方向,但事实证明,字符串属性在当前的开发版本中仅可用于 sql 数据源。对于 xmlpipe,有必要将补丁应用到结帐源。更多信息可以在sphinx 论坛中找到。

4

1 回答 1

28

您不能将对象 ID 用作 Sphinx 文档 ID - MongoDB 对象 ID 大于 Sphinx 文档 ID 的最大大小。

相反,您可以在生成 Sphinx 将要处理的 XML 时增加一个唯一 ID(我假设您正在使用 xmlpipe 将您的 Mongo 数据导入 Sphinx?)并将 MongoDB 对象 ID 作为字符串属性存储在 Sphinx 中。

您需要最新的 Sphinx 开发版本才能执行此操作 - 请参阅我对这个问题的回答以获得更多详细信息:Sphinx without using an auto_increment id

于 2009-11-05T15:38:59.310 回答