2011-12-06 45 views
0

我正在運行思維獅身人面像2.0.10在我的Rails 3.1 environemt和索引和搜索工作相當不錯。 當我搜索我的用戶模型時,我想對用戶名 進行通配符搜索,但不在電子郵件中,因此只有在給定的搜索字符串與用戶的電子郵件完全匹配時才能返回用戶。 我做了一些研究,發現這可能通過啓用define_index塊內的通配符搜索與思維獅身人面像 - 通配符僅在特定索引上搜索

set_property :enable_star => true 
set_property :min_infix_len => 1 

,並添加:infixes => true到應該支持通配符搜索

define_index do 

 indexes "CONCAT(first_name, ' ', last_name)", :as => :user_name,  :infixes => true 
 indexes email 

   has :id, :as => :user_id 
    
   set_property :enable_star => true 
   set_property :min_infix_len => 1 
end 

這是指標完成從自動生成的development.sphinx.conf

index user_core 
{ 
 source = user_core_0 
 path = /../../../../db/sphinx/development/user_core 
 charset_type = utf-8 
 min_infix_len = 1 
 infix_fields = user_name 
 enable_star = 1 
} 

infix_fields聲明CORRE我猜。

問題是,如果我搜索「.com」,我仍然得到所有用戶與.com電子郵件地址。 這可能是什麼原因?

感謝您的幫助!

回答

3

獅身人面像索引輸入中的單詞。通常只包含整個單詞,但可以使用中綴/前綴來啓用部分單詞。

無論如何,沒有在charset_table中定義的任何東西(你沒有一個如此採取默認),是一個分隔符。

所以「。」是一個分隔符。所以你的電子郵件將被編入索引。 「com」本身就是一個詞。

因此,搜索「.com」只是搜索「com」 - 即仍然是全字匹配。

您可以添加「。」到你的charset表來解決這個問題。 (但要小心它是否用作數據中的分隔符,如果只是索引名稱和電子郵件,可能不是問題)。可能還想添加@,以便整個電子郵件可以被索引爲一個「單詞」。


我不知道如何把它配置成你的ruby配置,我只知道它需要在sphinx conf文件中結束。

+0

非常感謝! 我能夠定義一個包含@和的默認字符集。在config/sphinx.yml中,一切正在工作:) – alex

相關問題