0

我正在做一个应用程序搜索,它可能会过滤几个不同的字段——其中一些字段并不存在于每个索引中。

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

如果一个条件字段不存在,有没有办法让思考狮身人面像自动不搜索模型,而不是像目前似乎发生的那样忽略条件。

例如

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

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


更新

它绝对不像我想要的那样工作。我的用户模型在索引中没有流派字段,因此我希望在搜索流派时将其排除在外。

示例搜索

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>] 

如果用户被排除在外,那就太好了。

4

1 回答 1

0

您可以尝试传递类以在参数中进行搜索。

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

为了我

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

它只是写一个错误

Sphinx 守护进程返回警告:索引 bulletin_core、bulletin_delta、user_delta ...:查询错误:在架构中找不到字段“类型”

但它不会崩溃。它仅返回具有索引字段的类的实例type

您也可以尝试这里写的方法https://groups.google.com/forum/?fromgroups=#!topic/thinking-sphinx/rrAPXtxUMjg但我还没有尝试过

于 2012-11-22T12:18:49.910 回答