diff options
-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 |