0

思考スフィンクスで関連列によって検索結果を並べ替える機能はありますか?

次のように定義されたインデックスがあります。

ThinkingSphinx::Index.define :demand, :with => :active_record, :delta => true do
  indexes client(:name), as: :client, sortable: true
  has(created_at, updated_at, client_id)
end

検索はコントローラーで実行されます。

Demand.search(params[:query], order: "#{params[:sort]} #{params[:direction].try(:upcase)}")

の値params[order]"client.name"、またはのparams[:direction]いずれ"asc"かです"desc"

以下は、sphinx によって生成されるクエリです。

SELECT * FROM `demand_core`, `demand_delta` WHERE MATCH('Test_client @sphinx_internal_class_name (Demand)') AND sphinx_deleted = 0 ORDER BY client.name DESC LIMIT 0, 20

検索を実行すると、次のエラーが表示されます。

ThinkingSphinx::SyntaxError - sphinxql: syntax error, unexpected CONST_FLOAT, expecting $end near '.name DESC LIMIT 0, 20; SHOW META':

解決策をしばらく探していましたが、見つかりませんでした。問題は、検索を実行した後、スフィンクスで順序付けを適用するにはどうすればよいですか?

4

1 に答える 1

1

ソート時にフィールド/属性名を使用する必要があります。したがって、あなたの状況ではclient、 ではなくclient.name. コントローラーに渡される params[:sort] の値を変更するのがそれほど難しいことではないことを願っています。

于 2013-05-03T16:36:05.723 に答える