2009-10-29 3 views
5

私は現在、別々のソースからのさまざまなデータを含む大きなデータベース(2百万行)の作成を計画しています。 auto_increment idsの周りのデータベースを構造化してレプリケーションとの同期の問題を防ぐのを避けたいと思います。また、挿入された各アイテムにユニークであることが保証された英数字のプロダクトコードが含まれているからです。auto_increment idを使用しないスフィンクス

私は、このデータベースをSphinxで索引付けするための検索エンジンを探していますが、索引付けリレーショナルデータベースに関する設計のために魅力的です。しかし、さまざまなチュートリアルやドキュメントを見ると、ある種のauto_incrementフィールドに依存するデータベースデザインや、文書IDが32/64bitの整数でなければならないことを示すドキュメントのbold statementが表示されているようです。

IDとしてauto_incrementフィールドを使用せずにSphinxでデータベースのインデックスを作成する方法はありますか?

答えて

3

スフィンクスはidsが整数でユニークであることだけを要求しますが、自動インクリメントされているかどうかは気にしないので、独自のロジックを展開できます。たとえば、文字列キーの整数ハッシュを生成します。

+0

を見てみましょうか? – squeeks

+1

挿入時にunixtime + microtimeを使用するのがよいでしょうか?私はそれを文書のIDと同様に挿入の時間として使用することができました。一つの石で2羽の鳥。 – squeeks

+0

私はそれが試してみる価値があると思います。乾杯。 – squeeks

1

スフィンクスは自動インクリメントに依存しません。ユニークな整数のドキュメントIDが必要です。たぶん、あなたはテーブルの代理一意の整数IDを持つことができますスフィンクスで動作するように。整数検索は英数字検索よりも高速であることが知られているので、どのくらいの英数字の製品コードはどれくらいですか?任意のサンプル?

+0

長さは4〜13文字の長さが異なります。 – squeeks

17

確かに - これは簡単に回避できます。あなただけのスフィンクスのために独自のIDを補うために必要があるとあなたがそれらが衝突したくない場合は、

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.conf(MySQLのコード例)でこのような何かを行うことができますあなたの検索でどのレコードが一致したのかを知る方法がまだ必要であることを示しています。スフィンクスはid(今は無意味です)に「属性」としてマークした列を返します。

スフィンクス0.9.10以降では、文字列属性がサポートされているため、検索結果の一部として商品コードを返すことができます。

0.9.10はまだ公式リリースではありませんが、すばらしいと思われます。 Zawodny is running it over at Craig's Listのように見えるので、この機能に頼るのはあまり緊張しません。

1

あなたのデータからXMLストリームを生成することは可能だと思います。 次に、ソフトウェア(Ruby、Java、PHP)でIDを作成します。または多分私はあなたが間違って読んで -

は、私はそのアプローチとの衝突のIDを持っていることについて少し心配 http://github.com/burke/mongosphinx

関連する問題