2013-02-06 40 views
0

我有一個方案,其中項目有計劃,計劃有許多不同的名稱和截止日期。如何根據獅身人面像(Rails)中的字段值對搜索結果進行排序

鑑於我可以搜索項目和排序項目字段值,甚至多態字段值我如何排序基於調度的結果與請求的調度名稱。

在思維獅身人面像中,我怎樣才能按照匹配的計劃名稱的截止日期排序我的搜索結果,例如。我希望通過「預訂」(時間表)截止日期對項目進行分類。

這似乎應該是簡單的獅身人面像,但它逃避我。我已經打算構建一個後期搜索排序,這個排序考慮了排名名稱,但是一個獅身人面像排序會更受歡迎。

我試過類似下面的內容,但它沒有考慮計劃名稱。

class Project 
    has_many :schedules 

    define_index do 
     has schedules.due_date, :type => :datetime, :as => :due_date 
    end 
end 

$: Project.search(query, :order => "due_date desc", :match_mode => :extended) 

有趣的是我得到與結果(有點排序),但它的不準確,可能是因爲它沒有考慮很多的時間表beloning一個項目,因此是不字段值具體。我也考慮過使用「with」,但是

有沒有一種方法可以用思維獅身人面像來實現? (我on Rails的2.3.x版本,所以我在思考,獅身人面像1.4.3。)

[編輯] 我已經成功地整理這篇文章的搜索與< =>操作,但需要看看了解時間表。我也研究過表達式排序,但這只是模型的搜索領域,我不知道我可以索引哪些變得可用。

回答

2

從帕特艾倫:這是不可能在我所描述的方式。時間表應該被搜索。

請參閱Google的小組討論中的Pat的answer。 「你想要做的事對於獅身人面像來說是不可能的:Sphinx沒有理解字段或屬性中不同數據段之間的關係,所以沒有任何關聯日程安排日期和時間表名稱 我建議你在Schedule上搜索,然後,因爲只有一個計劃名稱和一個計劃到期日期,所以你應該沒問題,然後你可以在搜索中使用該計劃的項目結果「。

1

我想你必須使用你的查詢關鍵詞,比如

默認排序方式是遞增的改變,你需要指定

Project.search <query>, :order => <attribute_name>, :sort_mode => :desc, :match_mode =>:extended 

如果你想使用多個屬性,或獅身人面像的排名分數,那麼你需要使用:擴展分類模式。

Project.search <query>, :sort_mode => :extended, :order => "attribute_name DESC/ASC, @relevance DESC/ASC", :match_mode=> :extended 

​​

+0

感謝您的回答,我在[編輯]中提到我已經考慮使用Sphinx擴展和表達式排序。這如何適用於我的場景?我的意思是,我不相信你可以指定'..,:order =>「schedules.attribute_name ASC/DESC」' – yekta

+0

@yekta請參考我提供的文檔鏈接。 您正在將屬性創建爲due_date。所以你應該能夠specfy ... ':order =>:due_date,:sort_mode =>:desc,:match_mode =>:extended' – mohit

+0

我沒有參考文檔,但又沒有解決我的方案。 (我指出了我的編輯模式中的匹配模式擴展和排序模式)如何獲得*計劃*只匹配某個特定的名稱進行排序?記住搜索來自'Project.search ...'這是我的問題的場景。 – yekta

相關問題