我有大约 9 个模型(更多即将推出),目前每个模型都具有共同和独特的 sphinx 属性 - 这些属性用作过滤器并且不需要可搜索。
这是我的一些模型的示例,它说明了这个问题:
class Ad
belongs_to :categories
define_index('ad') do
has categories.name, :as => :category_name_tags, :facet => true, :type => :string
end
end
class User
belongs_to :region
define_index('ad') do
#psudocode below
has "(SELECT name from categories)", :as => :category_name_tags, :facet => true, :type => :string
end
end
这样我就可以这样搜索:
results = ThinkingSphinx.search "red car", :with => { :category_name_tags => "autos" }, :classes => [Ad, User]
我所有的非广告模型都需要定义一个“category_name_tags”属性,该属性将匹配用户在搜索时指定的任何“category_name_tags”过滤器——换句话说,这些是应该始终匹配所有特定过滤器的虚拟属性——它们对大多数人来说是被动的模型,我想这样做是因为如果我的模型中不存在这些属性,则不会返回该模型的结果。
注意:我无法修改客户端使用的数据模型。