4

在我的 Rails 应用程序中,我使用 Sunspot 来索引几个不同的模型。然后我有一个返回混合结果的全局搜索表单。这工作正常:

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

我想在这个搜索中添加一个额外的模型,比如 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_number字段而不是字段添加对项目记录的搜索description

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

您可以为每个模型提出一个请求,然后将结果合并到一个列表中。我认为您无法一次搜索。

于 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 回答