Sphinx没有使用auto_increment id

时间:2009-10-29 16:07:04

标签: mysql search sphinx

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

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

有没有办法让Sphinx将数据库编入索引而没有auto_increment字段作为id?

4 个答案:

答案 0 :(得分:17)

当然 - 这很容易解决。如果你需要为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所以我不会太依赖这个功能。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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