代码之家  ›  专栏  ›  技术社区  ›  squeeks

不使用自动增量id的Sphinx

  •  5
  • squeeks  · 技术社区  · 16 年前

    我目前正在计划创建一个大型数据库(200多万行),其中包含来自不同来源的各种数据。我希望避免围绕自动增量ID构建数据库,以帮助防止复制出现同步问题,还因为插入的每个项目都有一个保证唯一的字母数字产品代码——在我看来,使用该代码更有意义。

    我正在寻找一个搜索引擎来索引这个数据库,Sphinx看起来非常吸引人,因为它的设计围绕着索引关系数据库。然而,通过查看各种教程和文档,似乎可以看出数据库设计依赖于某种形式的自动增量字段,而不是 bold statement

    有没有办法让Sphinx为数据库编制索引,而不使用自动增量字段作为id?

    4 回复  |  直到 16 年前
        1
  •  17
  •   outcassed    16 年前

    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
  •  3
  •   user187291    16 年前

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

        3
  •  1
  •   Sabeen Malik    16 年前

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

        4
  •  1
  •   chris    16 年前

    我认为可以从数据生成XML流。

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