summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/models.py33
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)