2010-08-20 25 views
5

我使用Django的查詢過濾器__search進行全文搜索如Django的全按相關

MyModel.objects.filter(title__search = 'some title') 

我如何得到它的相關命令文本搜索順序,因爲目前它似乎是按字母順序排序?

具體而言,我希望標題爲some title的搜索結果首先出現在標題爲a different but contains some title的東西之前。

編輯:

我已經注意到的是,對爲MyModel模型定義我:

class Meta: 
    ordering = ['title'] 

如果我刪除這則順序變成正確的,即按相關性排序。那麼有沒有一種方法可以將它留在模型定義中,因爲它在其他地方很有用,但是隨後在我的查詢中告訴它忽略它?

+1

我不相信它真的下令,你的希望。就像自然順序一樣,它是一個布爾搜索。 – 2010-08-20 12:27:25

+1

我會迴應Enrico的評論:鑑於您接受的答案,看起來您仍然錯誤地認爲,如果您刪除標題排序,您的結果實際上按相關性排序。情況並非如此:排序無關,您可以通過數據庫選擇的任何順序將它們提供給您。 – 2010-09-02 13:53:20

回答

0

Try:Model.objects.all().order_by().search() - calling order_by without any parameters does no ordering at all。除此之外,我會繼續Carl的Haystack推薦,特別是因爲它允許更復雜的事情,比如說「跳舞」可以匹配「舞蹈」,「舞者」和「跳舞」),faceting(「顯示我用戶&每個搜索結果的點擊次數「),獲取與當前顯示的對象類似的對象等等。當我上次嘗試飛快時,它不穩定(即在索引過程中崩潰),但花了相當短的時間是時候開啓Solr了,這很棒。

+0

最近我跟飛快有很好的運氣。但它並沒有做所有的花哨的東西:阻止是,面朝沒有:( – 2010-08-21 00:21:48

+0

我應該注意到,我的Whoosh經驗是短暫的,大約一年前,我聽說它穩定了,但並沒有真正需要它,因爲我們由於各種原因已經需要Solr(分面,支持多種語言)。 – 2010-08-21 21:27:15

3

如注意到here,搜索爲Boolean

有沒有這樣的相關性用於排序的係數。

A 愚蠢想法可以通過標題長度排序,這是有道理的。

2

得到一個Django項目良好的全文搜索的最簡單方法是使用優秀Haystack應用。設置起來非常容易,特別是如果您使用最簡單的搜索引擎後端(Whoosh,這是純粹的Python)。在幾分鐘之內,您可以設置全文索引您的內容,並提供相關性排序的結果以及許多其他不錯的功能。如果您超過了Whoosh的性能/併發性/功能限制,那麼因爲您使用Haystack來抽象搜索功能,所以您可以隨時使用類似Solr的內容。

0

如果使用Django> = 1,則可以通過使用具有ORDER BY子句的原始搜索來實現相關性。2

File.objects.raw(query_string, params[x,y,z]) 

儘管raw_querset在不支持count()的時刻有它自己的缺點。

但它確實帶回模型等是很容易使用,但並不是這麼簡單,__search