![](/img/trans.png)
[英]How to limit the total returned results when using ElasticSearch with Tire (A Ruby on Rails Gem)?
[英]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}}
]
如果要限制结果数,则始终可以在搜索块中运行一些红宝石,并使用size
和from
方法。
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.