Sphinx没有使用auto_increment id

squ*_*eks 5 mysql search sphinx

我目前正计划使用来自不同来源的各种数据创建一个大型数据库(200多万行).我想避免构建围绕AUTO_INCREMENT IDS数据库,可避免不同步的问题与复制,而且还因为插入将有保证是唯一的字母数字的产品代码的每个项目 - 在我看来更合理使用来代替.

我正在寻找一个搜索引擎来索引这个数据库与Sphinx看起来相当有吸引力,因为它围绕索引关系数据库设计.但是,查看各种教程和文档似乎表明数据库设计依赖于一种或另一种形式的auto_increment字段,并且文档中的一个相当大胆的声明说文档ID必须仅为32/64位整数或事物中断.

有没有办法让Sphinx索引一个没有auto_increment字段作为id的数据库?

cas*_*sey 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  
}
Run Code Online (Sandbox Code Playgroud)

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

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

0.9.10尚未正式发布,但看起来很棒.看起来Zawodny正在Craig's List上运行它,所以我不会太依赖这个功能.


use*_*291 3

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