4

私の Rails アプリでは、Sunspot を使用していくつかの異なるモデルのインデックスを作成しています。次に、混合結果を返すグローバル検索フォームがあります。これはうまくいきます:

Sunspot.search(Person, EmailAddress, PhoneNumber, PhysicalAddress) do
  fulltext params[:q]
  paginate :per_page => 10
end

この検索に追加のモデル、たとえば Project を追加したいと思います。Project モデルには、インデックス化されたかなりの部分があります。

class Project < ActiveRecord::Base
  searchable do
    string :category do
      category.name.downcase if category = self.category
    end

    string :client do
      client.name.downcase if client = self.client
    end

    string :status

    text :tracking_number
    text :description

    integer :category_id, :references => Category
    integer :client_id, :references => Client
    integer :tag_ids, :multiple => true, :references => Tag

    time :created_at, :trie => true
    time :updated_at, :trie => true
    time :received_at, :trie => true
    time :completed_at, :trie => true
  end
end

元の呼び出しを変更して、フィールドではなくSunspot.searchフィールドだけでプロジェクト レコードを検索するようにするにはどうすればよいですか?tracking_numberdescription

4

3 に答える 3

4
Sunspot.search(Person, EmailAddress, PhoneNumber, PhysicalAddress, Project) do
  fulltext params[:q] do
    fields(:tracking_number, :other_fields_outside_your_project_model)
  end

  paginate :per_page => 10
end

これにより、tracking_number フィールドと指定したその他のフィールド、特に Person、EmailAddress、PhoneNumber、および PhysicalAddress モデルで全文検索が実行されます。

于 2012-10-16T16:54:10.137 に答える
0

次のようなことを試しましたか:

Sunspot.search(Post) do
  keywords 'great pizza', :fields => [:title, :body]
end

モデルごとに1つのリクエストを作成し、結果を1つのリストにまとめることができます。1回の検索ではうまくいかないと思います。

于 2012-04-25T16:43:20.420 に答える
0

tracking_number を文字列フィールドではなくテキスト フィールドとして定義する必要があると思います。「テキストフィールド」のみの全文検索。

これを試しましたか:

text:tracking_number

そして、あなたの黒点検索は次のようになります:

Sunspot.search(Person, EmailAddress, PhoneNumber, PhysicalAddress, Project) do
  fulltext params[:q]
  paginate :per_page => 10
end

またね

于 2012-04-24T14:24:12.510 に答える