1

sphinx 2でこのエラーを取得する

sphinxql: syntax error, unexpected IDENT, expecting CONST_INT or CONST_FLOAT or '-' near 'WI AND published = 1 AND sphinx_deleted = 0 LIMIT 0, 10; SHOW META'

index.html.erb

テンプレートの部分コレクションの行 @posts_by_state でエラーがスローされていますが、同じ部分コレクションの他の 2 つのインスタンスは正常に機能しています。州の並べ替えは、それを捨てているものです。

posts_controller.rb

@posts_by_state = Post.search(params[:search], with: { state: current_user.state, published: true }, :page => params[:page], :per_page => 10)

post_index.rb

ThinkingSphinx::Index.define :post, :with => :active_record do
  indexes :title, as: :post_title
  indexes :desc, as: :description
  indexes tags(:name), as: :tag_name
  #indexes happening_on, sortable: true
  #has author_id, published_at
  has published_at
  has last_touched
  has state
  has published

  set_property:field_weights => {
    :post_title => 5,
    :description => 1,
    :tag_name => 10
  }
end
4

1 に答える 1

3

Sphinx の文字列属性は、並べ替えにのみ使用できます。フィルタリングやグループ化には使用できません。したがって、これを回避するオプションは次のとおりです。

  • 関連付けられたモデル (State または PostState など) に引き出し、代わりに外部キーの整数でフィルター処理します。
  • 代わりにその値をフィールドとして保存し、:with の代わりに :conditions を使用します。
  • CRC32値でハックします。

これらのオプションの最初のものを強くお勧めします (よりクリーンで正確だと思います) が、それはあなた次第です。

于 2013-08-01T23:58:44.370 に答える