2013-08-12 153 views
0

我想實現各種電子商店提供的自動完成功能。功能非常簡單,當你鍵入一些字符時,它開始顯示相關的建議。
我使用solr(django-haystack)實現它,使用haystack.query.SearchQuerySet中提供的自動完成方法。基本上,我得到按比分排序的結果列表。顯示前n個結果作爲建議。
Solr文檔包含$ product_name,$ category_name和其他字段。所以我生成的結果看起來像是「in」的列表。
當我更改類別名稱時出現問題。如果我更改類別名稱,則必須更新屬於該特定類別的所有產品以反映自動完成中的這些更改(更新此類別產品的所有文檔)。
另一種方法是將產品類別的id放在solr文檔中。在這種情況下,我每次都會查找類別名稱,這樣做效率不高。 有沒有其他有效的方法來做到這一點?更有效地顯示搜索結果?

+1

對不起,但這不是很清楚。你能更好地解釋一下你的問題嗎? –

+0

您是否可以將'Category Name'過濾器應用於您的自動建議查詢? –

+0

@MaurizioIndenmark:我已經更新了這個問題,隨時詢問是否有不清楚的地方。 – ashish

回答

0

由於您正在更改基礎數據,所以必須將其傳播到SOLR。

有不同的方法來做到這一點:

  1. 更新數據庫,並重新索引 - 優點:簡單,缺點:索引時間可能很大。
  2. 串聯更新數據庫和Solr - 優點:快速更新,幾乎是瞬間缺點:可能導致數據不一致(如果一次更新失敗)
  3. 更新數據庫並在Solr中安排增量導入。這就像兩者之間的中間地帶。

我會推薦第三種方法,但這需要一些前期的模式設計。閱讀有關delta導入here的更多信息,在DataImportHandler的上下文中。