【问题标题】:Sphinx without using an auto_increment id不使用 auto_increment id 的 Sphinx
【发布时间】:2010-12-11 07:34:48
【问题描述】:

我目前正计划创建一个包含来自不同来源的各种数据的大型数据库(2+ 百万行)。我想避免围绕 auto_increment ids 构建数据库,以帮助防止复制的同步问题,并且因为插入的每个项目都将具有保证是唯一的字母数字产品代码 - 在我看来,使用它更有意义。

我正在寻找一个搜索引擎来索引这个数据库,Sphinx 看起来相当吸引人,因为它的设计围绕索引关系数据库。但是,查看各种教程和文档似乎表明数据库设计依赖于一种或另一种形式的 auto_increment 字段,而文档中的 bold statement 表示文档 ID 必须仅为 32/64 位整数,否则会中断。

有没有办法让 Sphinx 索引数据库而不使用 auto_increment 字段作为 id?

【问题讨论】:

    标签: mysql search sphinx


    【解决方案1】:

    当然 - 这很容易解决。如果您只需要为 Sphinx 创建自己的 ID,并且不希望它们发生冲突,您可以在 sphinx.conf 中执行类似的操作(MySQL 的示例代码)

    source products {
    
      # Use a variable to store a throwaway ID value
      sql_query_pre = SELECT @id := 0 
    
      # Keep incrementing the throwaway ID.
      # "code" is present twice because Sphinx does not full-text index attributes
      sql_query = SELECT @id := @id + 1, code AS code_attr, code, description FROM products
    
      # Return the code so that your app will know which records were matched
      # this will only work in Sphinx 0.9.10 and higher!
      sql_attr_string = code_attr  
    }
    

    唯一的问题是您仍然需要一种方法来了解您的搜索匹配了哪些记录。 Sphinx 将返回 id(现在已无意义)以及您标记为“属性”的任何列。

    Sphinx 0.9.10 及更高版本将能够将您的产品代码作为搜索结果的一部分返回给您,因为它支持字符串属性。

    0.9.10 尚未正式发布,但看起来很棒。它看起来像Zawodny is running it over at Craig's List,所以我不会对依赖此功能感到太紧张。

    【讨论】:

      【解决方案2】:

      sphinx 只要求 id 是整数和唯一的,它不关心它们是否自动递增,因此您可以推出自己的逻辑。例如,为您的字符串键生成整数哈希。

      【讨论】:

      • 我有点担心 id 会与这种方法发生冲突 - 或者我读错了?
      • 在插入时是否可以使用 unixtime + microtime?然后,我可以将其用作插入时间以及文档 ID,即两鸟一石。
      【解决方案3】:

      Sphinx 不依赖于自动增量,只需要唯一的整数文档 ID。也许您可以在表中使用代理唯一整数 id 来使用 sphinx。众所周知,整数搜索比字母数字搜索要快得多。顺便说一句,您的字母数字产品代码有多长?有样品吗?

      【讨论】:

      • 它们的长度从 4 到 13 个字符不等。
      【解决方案4】:

      我认为可以从您的数据生成 XML 流。 然后通过软件(Ruby、Java、PHP)创建 ID。

      看看 http://github.com/burke/mongosphinx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-27
        • 1970-01-01
        • 2010-12-11
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        • 2021-06-21
        相关资源
        最近更新 更多