2012-01-05 68 views
1

我使用思維斯芬克斯在兩種不同的模式搜索:思維獅身人面像:單一模型的多個指標?

  1. 對正常的搜索功能
  2. 所有模型全部搜索自動完成功能的下拉

單一車型爲全搜索爲了這個問題,我們假設我有一個人和一個國家模式。

執行常規搜索時,我想要獲取所有名稱與搜索字符串匹配的人。爲了實現這個目標,我在Person索引中添加了一個國家名稱索引。迄今爲止都很好。

當搜索填充我的自動填充下拉列表時,我想顯示與我的搜索字符串匹配的所有國家和所有人。這裏出現問題。如果做一個應用程序範圍內的搜索,我現在得到:

  1. 所有國家的名字與我的搜索字符串
  2. 所有醫生的名字與我的搜索字符串,可惜...
  3. 屬於誰所有醫生到匹配搜索字符串的國家/地區。

最後一部分爲用戶提供了一些令人困惑的自動完成結果。是否有任何簡單的方法讓我通過使用內置功能來避免這種情況,例如在Person模型中有兩個索引,並選擇哪一種用於每種搜索?

回答

2

我假設你的模型就像下面:

class Person < ActiveRecord::Base 
    belongs_to :country 
    define_index 
    indexes :name 
    indexes country(:name), :as => country_name 
    end 
end 

class Country < ActiveRecord::Base 
    has_many :people # has_many :persons # depending on your singular/plural case 
    define_index 
    indexes :name 
    end 
end 

所以,你可以通過執行查詢得到的結果,而無需3(第三個條件):

ThinkingSphinx.search :conditions => {:name => params[:q]}, :classes => [Person, Country] 

但是,如果你想在模型上創建多個索引,它可以像下面的例子那樣完成:

class Person < ActiveRecord::Base 
    belongs_to :country 
    define_index :my_first_in do 
    indexes :name 
    indexes country(:name) 
    end 
    define_index :my_second_in do 
    indexes :name 
    end 
end 
+0

僅適用於任何遇到此問題並且不確定的人 - 此'define_index'語法適用於v3之前的Thinking Sphinx版本。 – pat 2015-08-26 14:55:32

2

sphinx v 3語法:

ThinkingSphinx::Index.define :country, name: "my_first_in", with: :active_record 
    indexes name 
end 
+0

你能指定Sphinx新版本的版本號嗎? – dvhh 2015-08-26 01:30:16

+0

這是v3以後的語法 – pat 2015-08-26 14:54:43

相關問題