2010-06-30 114 views
6

我已經使用SphinxThinking Sphinx實施全文搜索。 我想添加明智的搜索。有些東西一樣:-(以堆棧溢出的例子)如何實現像堆棧溢出這樣的搜索

假設你想看到有關你actvities,只需鍵入:

user:me 

然後,它會返回一個結果的所有問題和相關答案到piemesons。

如果鍵入

votes:15 

那麼它將返回標記有超過15票的所有問題的結果。

如果你鍵入

user:me votes:15 

那麼它將返回所有的問題和屬於你有超過15票的答案。

我該如何實現這件事?

現在我的搜索結果基於全文搜索。這些功能如何包含在內?

在獅身人面像或Solr或任何其他搜索引擎可用的任何選項?

回答

2

:with思維獅身人面像中的選項。

首先,您必須在索引定義(check out attributes section here)中定義這些屬性。

has views_count, :as => :views, :type => :integer 
has user.id, :as => :user, :type => :integer 

然後,你可以搜索這樣的帖子:

Post.search '', :with => {:views => 12..maxint, :user => User.first.id} 

(我不知道是否有給予開放範圍的任何更優雅的可能性,但12..max_int應該足夠)

兩個重要的事情:

    如果要算上相關的對象(如響應)
  1. ,你應該使用計數器緩存
  2. ,如果你的「用戶」是多態的關聯,我建議"CRC32(CONCAT(user_type, user_id))"代替user.id