更新:
好的,所以我不再收到错误消息,但我没有得到任何结果(即使只有一个搜索选项)。
我将 has 子句添加到我的索引列表中:
define_index do
has bar_profiles(:day), :as => :days
indexes bar_profiles.budget, :as => :budget_tags
.
.
end
所以我的搜索是:
bars = Bar.search(search_options)
和
search_options = {:conditions=>{:budget_tags=>"LOW BUDGET"}, :with=>{:days=>"thursday"}, :page=>1, :per_page=>20}
bar_profiles 有预算、经验、标签、日期等行。
Bar 有许多 bar_profiles(可能每天 1 个)
我想做的是使用思考狮身人面像搜索(在条形模型中)将用户选择的预算、经验、标签标准与日期与“今天”(当天)匹配的 bar_profile 相匹配。
这是我完成这个应用程序所要做的最后一件事,我正在拔头发,因为我找不到任何关于如何正确设置它的例子......
如果您有任何见解,请发布它,任何帮助。谢谢。
起初我认为我的问题与此类似,但多了一层抽象,但我认为我的问题在于搜索选项而不是索引。
首先让我声明,我一直在尝试使用思维狮身人面像修复以前的组实现时遇到了更糟糕的情况。我终于让项目 90% 工作,最后 10% 处理能够获得正确的过滤器进行检查。
这是一个简短的概述。该应用程序有 bar 和 bar_profiles(在连接到这 2 个和用户的许多其他表中,但它们不是理解这个问题所必需的。)对于每个 bar 的一周中的每一天都可以有一个 bar_profile。
所以在 bar_profile 模型中有:
belongs_to :bar
在酒吧里有:
has_many :bar_profiles
接下来是 bar 中的索引(由以前的开发人员编写):
define_index do
# name is a reserved keyword so we need to specify it as a symbol to work
indexes :name
indexes tags
indexes bar_profiles.day, :as => :day
indexes bar_profiles.tags, :as => :daily_tags
indexes bar_profiles.budget, :as => :budget_tags
indexes bar_profiles.experience, :as => :experience_tags
set_property :delta => true
end
我遇到的问题是这个当前的实现没有将搜索正确地限制在当天。它似乎不是检查酒吧的当前日期配置文件,而是检查所有的酒吧配置文件。
所以我在方法开始时设置了当前日期:
today = (Time.now + Time.zone_offset('EST')).strftime("%A")
然后我认为它需要像下面这样。我通过 pat引用了这篇关于使用 'with' 的帖子,但我不确定我是否弄乱了语法(因为我收到了一个错误):
search_options = {:conditions => {}, :with => {:day=>today}, :page => 1, :per_page => algorithm.results_per_page}
然后我使用这些搜索选项:
search_options[:conditions][:experience_tags] = options[:experience] unless options[:experience].blank?
budget = combine_budgets(options[:budget])
search_options[:conditions][:budget_tags] = budget unless budget.blank?
但是当我尝试运行搜索时,我在开发日志中得到了这个:
^^^^ ERROR! Reason: index bar_core,bar_delta: no such filter attribute 'day'
现在我对此感到非常困惑,因为 :day 的索引设置如上所示......我不确定“过滤器属性”是否与索引属性不同。如果有人可以对此提供一些见解,将不胜感激(看着你@pat)。
这是这个应用程序的最后一个问题,所以如果有人可以帮助我,我将非常感激。
谢谢,
艾伦