2

私は、テーブルを持っています:

id | geo_id | values ....
 1     1      wvrevev
 2     2      wvrevev
 3     3      wvrevev
 3     4      wvrevev
 7     5      wvrevev
 8     6      wvrevev
 9     8      wvrevev

2 つのフィールド sphinx インデックス: id と geo_id

指定されたレコードの一番上にあるような、ある種のものが必要です。SQL では、次のようなリクエストを受け取ります。

SELECT * FROM table ORDER BY FIELD(geo_id, "2", "3", "6") DESC

Sphinx でソートを指定するにはどうすればよいですか? このエントリ:

$cl->SetSortMode(SPH_SORT_EXTENDED, "FIELD(geo_id, "2", "3", "6") DESC");

エラーをスローします:

enter code hereindex sphinxoffers: sort-by attribute 'field' not found

状況から抜け出す方法は?

4

1 に答える 1

2
  1. Sphinx には FIELD() 関数がありません
  2. SORT_EXTENDED モードでは関数を指定できません。Sort Expression がありますが、1 のため役に立ちません。

そのリストを常に使用する場合は、インデックス作成時に属性として作成できます...

sql_query = SELECT id, geo_id, FIELD(geo_id, "2", "3", "6") AS sorter, .... 

次に、sphinxAPI コードで...

$cl->SetSortMode(SPH_SORT_EXTENDED, "sorter DESC");

[編集] または (コメントから情報を追加するには)...

ネストされた IF() 関数から FIELD と同じロジックを構築できます。おそらくEXPRESSIONソートを使用するか、SetSelectで仮想属性を作成し、それによってソートできます(EXTENDEDを使用)


[Edit2] sphinxQLでその新しい属性を使用するには、その別の並べ替え属性を使用しますORDER BY(sphinxQL は実際には JUST SPH_SORT_EXTENDED 並べ替えです)...

SELECT * FROM index WHERE MATCH(...) ORDER BY sorter DESC, WEIGHT() DESC 

みたいなこと。

于 2013-04-15T11:45:31.890 に答える