gpt4 book ai didi

ruby-on-rails - 如何限制关联的Tire/ElasticSearch结果?

转载 作者:行者123 更新时间:2023-12-02 22:33:59 26 4
gpt4 key购买 nike

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

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

由于某种原因,我无法让Tire将搜索结果限制为属于特定位置的帖子。我尝试使用模型中的cater_accessor :request_subdomain将子域放入模型中,并在 Controller 中添加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

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

我在这里想念什么?

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

有任何想法吗?

最佳答案

这个

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

回到前面-算盘的左侧应该是轮胎索引的属性,而右侧的值应该匹配。其次,这只是普通的 ruby ,所以
[:city_subdomain || :state_subdomain] 

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

而是要说 :city_subdomain匹配某个值或 state_subdomain匹配。假设 subdomain是您的搜索方法的局部变量或自变量(比类级变量更可取),则可以使用类似方法进行操作
filter :or, [
{:term => {:city_subdomain => subdomain}},
{:term => {:state_subdomain => subdomain}}
]

关于ruby-on-rails - 如何限制关联的Tire/ElasticSearch结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com