From d760e9f87fe040ab33dcdb942303d39fbf83a9c8 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Tue, 17 Mar 2026 17:59:37 +0100 Subject: ⚡️ cache search counts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/views_item.py | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'ishtar_common/views_item.py') diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 82eb4c7a8..18e3f5576 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -2908,13 +2908,41 @@ def get_item( if col.startswith(k): count_values.append(v) break - try: - q = items.values(*count_values) - items_nb = q.count() or 0 - except ProgrammingError: - items_nb = 0 + + # count in cache + n = datetime.datetime.now() + + search_vector = request_items.get("search_vector", "").strip() + + # cache only for GUI search + cache_search = search_vector or "submited" in request_items + q_cached_count = None + if cache_search: + q_cached_count_attrs = { + "content_type": ContentType.objects.get_for_model(model), + "query": search_vector, + "updated__gt": timezone.now() - datetime.timedelta(hours=24) + } + if own: + q_cached_count_attrs["ishtar_user_id"] = ishtaruser.user_ptr_id + SearchCache = apps.get_model("ishtar_common", "SearchCache") + q_cached_count = SearchCache.objects.filter(**q_cached_count_attrs) + if cache_search and q_cached_count.exists(): + items_nb = q_cached_count.all()[0].count + else: + try: + q = items.values(*count_values) + items_nb = q.count() or 0 + except ProgrammingError: + items_nb = 0 + if cache_search: + q_cached_count_attrs.pop("updated__gt") + q_cached_count_attrs["count"] = items_nb + SearchCache.objects.create(**q_cached_count_attrs) + if count: return items_nb + # print(str(items.values("id").query)) if data_type == "json-stats": -- cgit v1.2.3