0

「名前」列を持つ「レストラン」テーブルがあります。次のインデックスを定義しました。

indexes "REPLACE(UPPER(restaurants.name), 'THE ', '')", :as => :restaurant_name, :sortable => true

...接頭辞「The」を考慮せずにレストラン名を並べ替えたいためです。

私の問題は、これらのレコードのいずれかが (何らかの方法で) 更新されるたびに、新しいレコードがソート順の先頭にジャンプすることです。別のレコードが更新された場合も、残りのレコードよりも先にジャンプします。前回のインデックス再作成以降に更新されたレストランのリストと更新されていないレストランのリストです。それぞれのリストはアルファベット順ですが、リスト全体がこのように分離されている理由がわかりません。遅延デルタ インデックスを設定していますが、問題はこれに関連していると思います。

4

2 に答える 2

1

残念ながら、これは sphinx の制限です。

文字列で並べ替えるには、順序付けされた値のリストを作成し、リスト内の場所を表す整数に変換します。これはインデックスごとに発生するため、最初のアイテムがデルタ インデックスに追加されると、1 でソートされる 2 つのレコードが作成されます。次のレコードは、2 でソートされる 2 つのレコードがあることを意味します。

于 2010-04-23T22:08:23.120 に答える
0

私は独自のソートメソッドを作成することでこれを処理しました。文字列の一部に基づいて整数値を作成できます。私は安価なアプローチを取り、最初の文字のchar値を使用しました。フレーズ内のより多くの文字を変換するアルゴリズムを作成することで、より複雑になる可能性があります。私が別の検索エンジンを使って検索したとき、私たちは6文字を使用しましたが、それが乱れることはめったにありませんでした。それが私たちの注文方法全体でした。これを行ってそれまでに二次注文にすると、デルタの問題を解決するのに役立ちます。

于 2010-04-27T18:25:04.140 に答える