2015-12-08 37 views
1

我有一個搜索頁面的應用程序。用戶將能夠搜索到幾個表。但是,恐怕這會對服務器造成巨大的損失。Django應用程序搜索引擎的建議

ads_list = advertisements.filter(Q(title__icontains=words) | Q(street_name__icontains=words) | 
               Q(city__in=city.filter(Q(name__icontains=words) | Q(related_names__icontains=words) | Q(post_code=words) | Q(region__icontains=words))) | 
               Q(state_category__in=state_category.filter(Q(category_name__icontains=words) | Q(search_tags__icontains=words))) | 
               Q(advertisement_type__in=advertisement_type.filter(Q(type_name__icontains=words) | Q(search_tags__icontains=words)))) 

在搜索頁面我使用digg_paginator來傳播結果。

我的問題是:這些結果是由Django緩存還是每次用戶點擊「下一頁」按鈕時都有新的查詢? 我想知道是否應該自己實施Django cache API並嘗試處理它,但我不知道Django是否已經比我做得更好。 我也會嘗試提供更多更好的每頁結果結果,這樣用戶不會經常更改頁面。

回答

1

are these results cached by Django or every time the user hits the "next page" button a new query is made?

這取決於按鈕按下的處理方式。如果你的按鈕按下了一個Django視圖並且你依賴於Django的分頁器,那麼每次按下按鈕時,Django都會查詢你的數據庫。

如果你想減少數據庫查詢,我能想到的兩種方法:使用JavaScript在客戶端

  1. 手柄分頁。按下按鈕會調用Django視圖,該視圖會將完整的結果集返回給客戶端。然後,客戶端將使用JavaScript將結果分成多個頁面,並通過分頁提供對所述頁面的訪問。

  2. 使用Django的緩存框架。您可以設置一個Redis服務器並配置Django以將其用於緩存。然後更新您的視圖以使用cache_page裝飾器。閱讀更多關於這裏:https://docs.djangoproject.com/en/1.9/topics/cache/

+0

緩存解決方案看起來很有趣。我會研究這一點。謝謝。 –

相關問題