summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-09-29 13:17:25 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-09-29 13:17:25 +0200
commit42c688f5c7817d1e69c6ee4c1cb59d90ffbb7885 (patch)
tree675cf3303d16aad6fcb8556c113516184d4f8e42
parent9767c4cc9473dbc6eff402874363015fd70689b9 (diff)
downloadChimère-42c688f5c7817d1e69c6ee4c1cb59d90ffbb7885.tar.bz2
Chimère-42c688f5c7817d1e69c6ee4c1cb59d90ffbb7885.zip
Command to force update of search vectors
-rw-r--r--chimere/management/commands/chimere_update_search_engine.py22
-rw-r--r--chimere/models.py10
-rw-r--r--chimere/utils.py5
3 files changed, 32 insertions, 5 deletions
diff --git a/chimere/management/commands/chimere_update_search_engine.py b/chimere/management/commands/chimere_update_search_engine.py
new file mode 100644
index 0000000..8ab5aeb
--- /dev/null
+++ b/chimere/management/commands/chimere_update_search_engine.py
@@ -0,0 +1,22 @@
+import sys
+
+from django.core.management.base import BaseCommand
+from chimere import models
+
+
+class Command(BaseCommand):
+ help = "Update internal search engine"
+
+ def handle(self, *args, **options):
+ for model in [models.Marker, models.Route, models.Polygon]:
+ sys.stdout.write("* {}\n".format(model))
+ changed = 0
+ q = model.objects
+ total = q.count()
+ for idx, item in enumerate(q.all()):
+ sys.stdout.write("{}/{}\r".format(idx + 1, total))
+ sys.stdout.flush()
+ changed += 1 if item.update_search_vector() else 0
+ print("{} item(s) updated".format(changed))
+
+
diff --git a/chimere/models.py b/chimere/models.py
index 0582d34..52cd9eb 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -868,8 +868,11 @@ class GeographicItem(models.Model):
"""
Update the search vector
:param save: True if you want to save the object immediately
- :return: self
+ :return: True if modified
"""
+ old_search = ""
+ if self.search_vector:
+ old_search = self.search_vector[:]
search_vectors = []
base_q = self.__class__.objects.filter(pk=self.pk)
for cat in self.categories.values('pk').all():
@@ -896,9 +899,10 @@ class GeographicItem(models.Model):
))
search_vectors.append(q.all()[0].search)
self.search_vector = utils.merge_tsvectors(search_vectors)
- if save:
+ changed = old_search != self.search_vector
+ if save and changed:
self.save()
- return self
+ return changed
def weighted_post_save(sender, **kwargs):
diff --git a/chimere/utils.py b/chimere/utils.py
index 2ed2fd3..b17ba06 100644
--- a/chimere/utils.py
+++ b/chimere/utils.py
@@ -1489,8 +1489,9 @@ def merge_tsvectors(vectors):
result_dict = {k: ",".join([str(val) for val in result_dict[k]])
for k in result_dict}
# {'lamelie': "1,5", "hagarde": "2", "regarde": "4"} =>
- # "lamelie':1,5 hagarde:2 regarde:4"
- result = " ".join(["{}:{}".format(k, result_dict[k]) for k in result_dict])
+ # "'lamelie':1,5 'hagarde':2 'regarde':4"
+ result = " ".join(["'{}':{}".format(k, result_dict[k])
+ for k in result_dict])
return result