2014-09-29 92 views
0

這可能是一個非常基本的問題。但是,任何鏈接/解決方案都將有所幫助。Django Haystack + Solr:在查詢中獲得非冗餘結果

的指標看起來是這樣的,對於模式「AMODEL」

id  name    user 
1  Some name    u1 
2  Some name    u2 
3  Some name    u3 
4  Not some name   u1 
5  Not some name   u4 
6  name 1     u5 
7  name 2     u1 
8  name 3     u3 
9  name 4     u1 

獲得價值「名稱」查詢申請

SearchQuerySet().models(Amodel).filter(name = 'name').values_list('name')[0:5] 

這當然會給冗餘結果

['Some name', 'Some name', 'Some name', 'Not some name', 'Not some name'] 

但我怎樣才能得到這樣的獨特結果

['Some name', 'Not some name', 'name 1', 'name 2', 'name 3'] 
+0

是否有不同的關鍵字?我不熟悉solr。 – 2014-09-29 19:32:21

+0

在相當長的一段時間裏四處尋找'獨特'和'獨特'的關鍵詞,沒有得到任何解決方案。但是,有些人喜歡刻面/分組,但在這裏無法適合這些。 – NEB 2014-09-29 19:37:28

+0

正如我看到它可以通過使用方面來解決,你需要幫助使用哪個參數來查詢方面? – Mysterion 2014-10-01 19:43:34

回答

1

從Solr的角度來看,Field Collapsing是你所需要的。壞消息是Django Haystack尚未實現此功能。有一個pull-request exists但等待3年合併。

無論如何,你可以嘗試由Chris Adams寫的this experimental backend

希望它有幫助。

+0

我也在其他一些線程中看到了同樣的答案(使用分組)。我會試一試並更新回來。但是,感謝您確認該分組尚未在乾草堆中得到支持。 – NEB 2014-10-03 14:48:31

0

使用set()來擺脫重複項。

set(SearchQuerySet().models(Amodel).filter(name = 'name').values_list('name')[0:5])

+0

我正在尋找solr/haystack功能的解決方案,可能會遺漏/還不知道/不知道如何使用它,而不是在我們的應用程序級別。在你的解決方案中,切片'[0:5]'放棄了它的偏好,因爲它是在solr中執行的,並且我的期望是一次查詢中的5個非冗餘結果。 set()的問題是,第一次結果是'['Some name','Not some name']',我需要再次查詢以獲得後續結果'['name 1' ,'name 2','name 3'],這是我真正想避免的(冗餘/重複查詢)。 – NEB 2014-10-03 09:18:48

+0

你的模板看起來像什麼?你是否索引'id'和'user'?如果是,請將其移除。 – Oliver 2014-10-03 13:30:18

+0

'id'只是用於參考顯示在這裏,它沒有被索引(haystack將內部索引id作爲'django_id')。我肯定需要爲'user'編制索引,因爲一些過濾邏輯依賴於它。我在這裏展示它來表明'name'正在被不同的用戶添加,就是這樣。 – NEB 2014-10-03 14:45:30