我有一组使用belongs_to
关联的类别和子类别中的帖子集合。此外,这些帖子与我的州和城市模型有belongs_to
关系。如何通过关联限制轮胎/弹性搜索结果?
我通过对URL中的子域进行request.subdomain
检查,将控制器上的帖子显示限制为属于相应位置(即城市或州)的帖子。除了使用Tire/ElasticSearch进行搜索外,此功能完美适用。
由于某些原因,我无法让Tire将搜索结果限制到属于特定位置的帖子。我尝试在模型中使用cater_accessor :request_subdomain
将子域加入模型,并在控制器中添加before_filter
,其中@city_or_state
与子域相关联。
def set_request_subdomain
Post.request_subdomain = @city_or_state if [email protected]_or_state.nil?
end
这里是我的模型:
def self.search(params)
tire.search(load: true, page: params[:page], per_page: 10) do
query { string params[:query], default_operator: "AND" } if params[:query].present?
filter :terms, :published => [true]
filter :terms, :request_subdomain => [:city_subdomain || :state_subdomain]
end
end
def to_indexed_json
to_json(methods: [:city_name, :city_subdomain, :state_name, :state_subdomain])
end
def city_name
self.city.name
end
def city_subdomain
city.subdomain.titleize
end
def state_name
self.state.name
end
def state_subdomain
state.subdomain.titleize
end
我需要搜索由位置(即子域)来限制的结果。
我在这里错过了什么?
UPDATE: 我按照this railscast并没有能够得到刻面的工作......我想也许我可以限制搜索项目基于一个面(即没有选择的小面在用户railscast),但我一直无法得到这个工作。
任何想法?
看起来应该工作就好了,你检查的具体文件你必须在Elasticsearch中确保它们实际上具有你要过滤的子域,然后检查正在使用的分析器,以确保你没有搜索与你认为你实际上在http:/ /stackoverflow.com/questions/16005220/tire-terms-filter-not-working – concept47 2013-05-20 21:30:36
我现在正在努力的部分是将request.subdomain与ElasticSearch中记录与该子域进行比较的逻辑......我可以使用用户选择的Facets与railscast相同的方式工作只是不能'基于'request.subdoman'自动'工作' – 2013-05-20 21:33:32