diff options
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 |
commit | 42c688f5c7817d1e69c6ee4c1cb59d90ffbb7885 (patch) | |
tree | 675cf3303d16aad6fcb8556c113516184d4f8e42 | |
parent | 9767c4cc9473dbc6eff402874363015fd70689b9 (diff) | |
download | Chimè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.py | 22 | ||||
-rw-r--r-- | chimere/models.py | 10 | ||||
-rw-r--r-- | chimere/utils.py | 5 |
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 |