我正在进行可能会过滤几个不同字段的应用程序搜索 - 其中一些字段不存在于每个索引中。
目前正在整理正确的类以在控制器中搜索,使用复杂的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>]
如果用户被排除在外,那将是非常好的。
答案 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,但我还没试过呢