繁体   English   中英

如何限制关联的Tire / ElasticSearch结果?

[英]How do I limit Tire/ElasticSearch results by association?

我有一个使用belongs_to关联在类别和子类别内的帖子集合。 此外,这些帖子与我所在的州和城市模型之间具有belongs_to关系。

我通过使用URL中子域上的request.subdomain检查,将控制器上的帖子显示限制为属于各自位置(即城市或州)的帖子。 除使用Tyre / ElasticSearch进行搜索外,这对其他所有功能均适用。

由于某些原因,我无法让Tire将搜索结果限制为属于特定位置的帖子。 我尝试使用模型中的cater_accessor :request_subdomain将子域放入模型,并在控制器中添加before_filter ,其中@city_or_state是与子域关联的位置。

 def set_request_subdomain
   Post.request_subdomain = @city_or_state if !@city_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

我需要搜索以通过位置(即子域)限制结果。

我在这里想念什么?

更新:我已经遵循了这个 railscast并能够使Facets正常工作...我在想也许我可以限制基于Facet搜索的项目(即,没有用户像在railscast中那样选择Facet),但是我没有无法使它正常工作。

有任何想法吗?

这个

filter :terms, :request_subdomain => [:city_subdomain || :state_subdomain] 

回到前面-算盘的左侧应该是轮胎索引的属性,右侧的值应该匹配。 其次,这只是红宝石,所以

[:city_subdomain || :state_subdomain] 

计算结果为:city_subdomain ,“或”不会神奇地进入查询逻辑

相反,您想说:city_subdomain匹配某个值或state_subdomain匹配。 假设subdomain是您的搜索方法的局部变量或自变量(比类级变量更可取),则可以使用类似方法进行操作

filter :or, [
               {:term => {:city_subdomain => subdomain}},
               {:term => {:state_subdomain => subdomain}}
            ] 

如果要限制结果数,则始终可以在搜索块中运行一些红宝石,并使用sizefrom方法。

search = Tire.search(Location.index_name) do |s|
    s.query do |q|
        q.string "las vegas"
    end
    # Best used for pagination
    s.size 25 # limit 25 results
    s.from 0 # start at the beginning.
end

我不确定您到底需要什么,但是您总是可以做类似的事情

if something.nil?
    s.size 0
else
    s.size 25
end

那将是根据某些条件更改限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM