太阳黑子Solr搜索关联

时间:2014-04-15 16:13:32

标签: ruby-on-rails ruby ruby-on-rails-3 search solr

我有一个Event模型和一个EventDate模型。

事件has_many:event_dates和EventDate belongs_to:event

我尝试设置太阳黑子Solr搜索,以便它只返回事件日期为未来的事件。

我想我在事件模型中正确设置了这个:

  searchable do
   text :headline, :info
   text :event_dates do 
    event_dates.map(&:event_date).compact.join(" ")
   end 
  end

但在我的搜索控制器中,我遇到了这个问题:

class SearchController < ApplicationController
  def search
    @search = Sunspot.search [Event, Venue] do
      fulltext params[:search]

      any_of do
        all_of do
          with(:class, Event)
          with(:event_date).greater_than(Time.zone.now)
        end
        all_of do
          with(:class, Venue)
        end
      end    

    end
    @results = @search.results
    respond_to do |format|
      format.json { render json: @results }
    end
  end  
end  

with(:event_date).greater_than(Time.zone.now)产生错误:Sunspot::UnrecognizedFieldError (No field configured for Event, Venue with name 'event_date'):

我也尝试了复数with(:event_dates)但产生了同样的错误。

搜索工作正常,没有with(:event_date)行,但我确实需要这样做才能使搜索符合它的目的。

有没有Sunspot Solr经验的人可以帮忙吗?

提前致谢。

哦,如果有人想知道,这是我在Venue模型中可搜索的块:

  searchable do
    text :name, :address_1, :address_2, :postcode
    text :town do
      town.town
    end
  end

1 个答案:

答案 0 :(得分:1)

我最终通过修改事件模型中的可搜索块来解决这个问题:

  searchable do
   text :headline, :info
   time :event_dates, :multiple => true do 
    event_dates.map(&:event_date)
   end 
  end

更改是将event_dates上的数据类型更改为时间(一个明显的错误),但添加:multiple => true作为事件有很多event_dates。