思考狮身人面像 - 如果索引中不存在字段,则排除类

时间:2012-11-22 10:55:56

标签: ruby-on-rails thinking-sphinx

我正在进行可能会过滤几个不同字段的应用程序搜索 - 其中一些字段不存在于每个索引中。

目前正在整理正确的类以在控制器中搜索,使用复杂的if elsif elsif事件。

如果一个条件字段不存在,有没有办法让思考sphinx自动不搜索模型,而不是忽略当前似乎发生的条件。

例如

 ThinkingSphinx.search(@query, :conditions => {:genres =>"classical-music"}, :match_mode => :extended, :classes => [Performer, Promoter, Tour, Venue, User], :order => :name_sort, :sort_mode => :asc)

用户没有流派,但包含在搜索结果中


更新

它肯定不会像我一样工作。我的用户模型在索引中没有genres字段,因此我希望在搜索类型时将其排除。

搜索示例

User.search("anne")
  Sphinx Query (3.6ms)  anne
  Sphinx  Found 1 result
  User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` IN (80)
 => [#<User id: 80, first_name: "Anne", last_name: "Bowers", bio: nil, email: "anne@bowers.com", phone: nil, created_at: "2012-11-20 09:36:05", updated_at: "2012-11-20 09:36:05", role: nil, promoter_id: nil, performer_id: nil, job_title: nil>] 


ThinkingSphinx.search("anne", :conditions => {:genres => "music"}, :match_mode => :extended, :classes => [User], :order => :name_sort, :sort_mode => :asc)
  Sphinx Query (3.2ms)  anne @genres music
  Sphinx  Found 1 result
  User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` IN (80)
 => [#<User id: 80, first_name: "Anne", last_name: "Bowers", bio: nil, email: "anne@bowers.com", phone: nil, created_at: "2012-11-20 09:36:05", updated_at: "2012-11-20 09:36:05", role: nil, promoter_id: nil, performer_id: nil, job_title: nil>] 

如果用户被排除在外,那将是非常好的。

1 个答案:

答案 0 :(得分:0)

您可以尝试传递类以在params中搜索。

但我认为你的方式也应该有用。

对我来说

ThinkingSphinx.search(conditions: { type: "text" })

它只是写错误

  

Sphinx守护程序返回警告:index bulletin_core,bulletin_delta,user_delta ...:查询错误:no field&#39; type&#39;在架构中找到

但它并没有崩溃。它仅返回具有索引字段type

的类的实例

你也可以尝试一种写在这里的方式https://groups.google.com/forum/?fromgroups=#!topic/thinking-sphinx/rrAPXtxUMjg,但我还没试过呢