4

他の複数のテーブルに属する生地モデルがあります。

class Fabric < ActiveRecord::Base
  validates :name, presence: true
  belongs_to :design
  belongs_to :composition
  belongs_to :collection
  belongs_to :style
  belongs_to :origin
  belongs_to :texture
  belongs_to :supplier
  has_and_belongs_to_many :colours

  searchable do
    text :name, :boost => 5 
    text :description
    text :composition do
      composition.name
   end
    text :collection do
      collection.name
    end
   text :style do
     style.name
   end
   text :origin do
     origin.name
   end
   text :texture do
     texture.name
  end
   text :supplier do
      supplier.name
  end
  end
  end

すべての逆関連付け (Has_many) などをセットアップしましたが、これらの関連付けられたすべてのテーブルの名前フィールドをクエリする全文検索を取得できないようです。

どんな助けでも大歓迎です。

 @search = Fabric.search do
    fulltext params[:search]
  end
  @fabrics = @search.results

ロス

4

3 に答える 3

11

一部の関連付けがnilになる可能性がある場合は、それをテストすることを忘れないでください。そうしないと、インデックスの再構築中にエラーが発生します。

text :collection do 
  collection.name if collection
end
于 2013-01-09T15:48:26.920 に答える
9

検索するフィールドを指定するには、フルテキスト内でブロックを渡す必要があります。

@search = Fabric.search do
  fulltext params[:search] do
    fields(:collection, :style, :origin)
  end
  .....
end

検索可能なブロックにインデックスを付ける方法は次のとおりです。Solr はドキュメントの観点から考えます。協会かどうかは関係ありません。

searchable do 
  text :collection do 
    collection.text 
  end
end

次に、再インデックスします。

詳細については、こちらをご覧ください https://github.com/sunspot/sunspot#full-text

https://github.com/sunspot/sunspot#setting-up-objects

于 2012-05-26T17:32:24.100 に答える
3

モデルの更新後にデータのインデックスを再作成していないようです。

次のコマンドを実行して、インデックスを再作成します。

bundle exec rake sunspot:solr:reindex
于 2012-05-26T17:29:49.720 に答える