diff options
-rw-r--r-- | chimere/models.py | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/chimere/models.py b/chimere/models.py index 06e2ea9..a46d9b1 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -591,7 +591,9 @@ class GeographicItem(models.Model): submiter_comment = models.TextField(_("Submitter comment"), max_length=200, blank=True, null=True) status = models.CharField(_("Status"), max_length=1, choices=STATUS) - keywords = models.TextField(_("Keywords"), blank=True, null=True) + keywords = models.TextField( + _("Keywords"), blank=True, null=True, + help_text="Ajouter des mots clés séparés par des espaces") import_key = models.CharField(_("Import key"), max_length=200, blank=True, null=True) import_version = models.IntegerField(_("Import version"), @@ -1025,11 +1027,23 @@ class GeographicItem(models.Model): """ subcats = SubCategory.getAvailable(instance=True, area=area) base_query = cls.objects.filter(categories__in=subcats) + base_q = None + if " " not in query.strip(): + simple_query = query.strip() + kw_q = Q(keywords=simple_query) | \ + Q(keywords__icontains=" " + simple_query) | \ + Q(keywords__icontains=simple_query + " ") + q = base_query.filter(kw_q) + if q.count(): + base_q = kw_q if settings.CHIMERE_SEARCH_TECH == 'search_vector': - q = cls.objects.filter(categories__in=subcats, - search_vector=SearchQuery( - query, - config=settings.CHIMERE_SEARCH_LANGUAGE)) + q = Q(categories__in=subcats, + search_vector=SearchQuery( + query, + config=settings.CHIMERE_SEARCH_LANGUAGE)) + if base_q: + q = q | base_q + q = cls.objects.filter(q) else: search_factors = [('categories__name', 1), ('categories__category__name', 1), @@ -1052,7 +1066,14 @@ class GeographicItem(models.Model): order.append("similarity_" + key) q = base_query.annotate(**annotate_q).filter(filtr).order_by( *order) - if q.count(): + count = q.count() + if count < 9 and limit != 0.1: + # try to get more + continue + if count: + if base_q: + q = base_query.annotate(**annotate_q).filter( + filtr | base_q).order_by(*order) break if get_json: return cls.getGeoJSONs(q, slice=slice, check_next=check_next) |