私はsunspot gemを使って自分のレールアプリに検索を追加しています。id、amount、またはdescriptionでトランザクションを検索したいと考えています。単一の属性による検索はうまくいきますが、複数のwith
またはfulltext
呼び出しを検索ブロックに追加すると、結果が返されません。 with
コールをany_of
ブロックにラップできますが、fulltext
を含むと、undefined method 'fulltext' for #<Sunspot::DSL::Scope:0x007fb6519c13a0>
エラーが発生します。sunspotを使用して同じモデルの異なるタイプの複数のフィールドを検索する
検索では、1つの属性のみを検索すると正しい結果が返されます。つまり、any_ofブロックに1つのフルテキストまたは1つのフルテキストしかないことを意味します。だから、私はid、amount、descriptionを無条件で検索します。意味213 213のトランザクションがある場合、213を検索するとid 213のトランザクションが返されます。$ 4.25を検索すると、結果は$ 4.25という額のすべてのトランザクションを返します。私が「Starbucks」を検索した場合、「Starbucks」との取引はすべて明細書に記載されています。もし私がanyblockの中に複数の、または全文を持っていれば、返される結果は得られません。
私には何が欠けていますか?
私はそうのようなトランザクションモデルを持っている:
class Transaction < ActiveRecord::Base
...
searchable do
text :description
integer :id
float :amount
end
...
end
そしてそうのようなコントローラでのアクション:
def search
@search = Transaction.search do
any_of do
with(:amount, params[:search])
with(:id, params[:search])
fulltext(params[:search])
end
end
@transactions = @search.results
end
どのように 'それを壊す'ですか?それはエラーを出すか、結果を返さないか、間違った結果を返しますか?params [:search]の内容を投稿できますか?実際にその検索を含む 'description'フィールドを持つモデルがあることを確認できます – PhilVarg
エラーと詳細を含む質問を更新しました。私は同じモデル上の異なる型の複数のフィールドを検索する方法を知る必要があるので、エラーはおそらく構文的です。私は説明フィールドを持つトランザクションモデルを持っています。 –