思考Sphinx应用程序范围的搜索:通过仅存在于某些模型中的属性进行过滤

Yon*_*ciu 3 search thinking-sphinx

我想搜索多个模型并按某些模型具有的某些属性进行过滤,有些则不需要.我希望带有属性的模型得到过滤,但没有它的模型只是忽略它.

目前只有具有该属性的模型才会返回结果.有没有办法让其他模型以某种方式忽略属性过滤器返回结果?

Yon*_*ciu 5

找到了办法.在没有这种属性的模型的索引上,可以像这样创建一个虚拟的:

has "0", :type => :integer, :as => :the_attribute_name
Run Code Online (Sandbox Code Playgroud)

然后在执行应用程序范围的搜索时:

@results = ThinkingSphinx.search(@search_term, 
  :with => {:the_attribute_name => [@the_attribute_value, 0]}
)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这假设在具有此属性的模型上不允许零值.如果零是那些模型中的有效属性,则可以使用另一个值(例如9999999).请注意,属性不能接受负整数.