2017-02-23 59 views

回答

2

您可以在模型類中定義的方法get_indexed_objects,返回項的查詢集被編入索引:

@classmethod 
def get_indexed_objects(cls): 
    return cls.objects.filter(live=True) 
+1

非常感謝!我很快就會提交一份文檔補丁。 – shacker

1

如果你只需要對結果執行一些簡單的過濾,我建議所有的索引在查詢時做過濾(除非你不包括相當多的文件以節省硬盤空間):

MyModel.objects.filter(live=True).search("..") 

鶺鴒將是過濾器轉換成Elasticsearch查詢的一部分,所以這不應該」對pe沒有任何顯着的影響rformance。這確實需要使用index.FilterField對所有過濾器字段進行索引,但如果您使用的是頁面模型,則Wagtail已爲所有基本頁面字段執行此操作。

這種方法的主要優點是,如果您將來需要爲單獨的搜索功能執行此操作,可以輕鬆地刪除篩選器。例如,W does可以做到這一點,以允許搜索管理員中的所有頁面,但只能在前端進行搜索。

+0

謝謝卡爾。在我們的案例中,可能存在一些隱私問題,我們需要注意圍繞某些記錄,因此將它們保留在索引之外非常重要。但作爲一般方法,您是對的 - 將所有內容編入索引,然後過濾爲您提供更大的靈活性。 – shacker

相關問題