From 6dd0f4fc70cf8aa87fd2e9d60bb07bc48e824fa4 Mon Sep 17 00:00:00 2001 From: Kaltar5679 Date: Wed, 10 Jun 2015 16:00:37 +0200 Subject: [PATCH] optimize search_indexes --- examples/sandbox/src/django-haystack | 2 +- src/django-haystack | 2 +- telemeta/search_indexes.py | 59 +++++++++++++++------------- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/examples/sandbox/src/django-haystack b/examples/sandbox/src/django-haystack index cecb459f..bd60745c 160000 --- a/examples/sandbox/src/django-haystack +++ b/examples/sandbox/src/django-haystack @@ -1 +1 @@ -Subproject commit cecb459ff4468a79a43cead3d09e213d0980c080 +Subproject commit bd60745ce82318b1819768c9a31db0579228654d diff --git a/src/django-haystack b/src/django-haystack index 0576c809..ebf1a5c9 160000 --- a/src/django-haystack +++ b/src/django-haystack @@ -1 +1 @@ -Subproject commit 0576c8093caf59bebedce75e0d711aacfd36f03f +Subproject commit ebf1a5c94a7e8af1329084cf0056de0014821723 diff --git a/telemeta/search_indexes.py b/telemeta/search_indexes.py index cd3c526c..65111b95 100644 --- a/telemeta/search_indexes.py +++ b/telemeta/search_indexes.py @@ -16,7 +16,7 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable): #advance search title = indexes.NgramField(model_attr='title') code = indexes.NgramField(model_attr='code', default='') - location = indexes.CharField(model_attr='location__name', default='', null='None') + location = indexes.NgramField(default='', null='None') ethnic_group = indexes.CharField(model_attr='ethnic_group', default='') instruments = indexes.NgramField(default='') collectors = indexes.NgramField(model_attr='collector', default='') @@ -37,28 +37,31 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable): def prepare_location(self, obj): location = [] - location.append(obj.location) - location_alias = LocationAlias.objects.filter(location__name=obj.location) - location_rela = LocationRelation.objects.filter(location__name=obj.location) - for rela in location_rela: - location.append(rela.ancestor_location) - for alias in location_alias: - location.append(alias) - return "%s" % location + if obj.location is not None: + location.append(obj.location.name) + location_alias = LocationAlias.objects.filter(location__name=obj.location) + location_rela = LocationRelation.objects.filter(location__name=obj.location) + for rela in location_rela: + location.append(rela.ancestor_location.name) + for alias in location_alias: + location.append(alias.alias) + return u"".join(' ' + local for local in location).encode("utf-8") def prepare_instruments(self, obj): item = MediaItemPerformance.objects.all().filter(media_item__exact=obj) instruments = [] for material in item: - instruments.append(material.instrument) - instruments.append(material.alias) - return "%s" % instruments + if material.instrument is not None: + instruments.append(material.instrument.name) + if material.alias is not None: + instruments.append(material.alias.name) + return u"".join(' ' + instru for instru in instruments).encode("utf-8") def prepare_collectors(self, obj): collectors = [] collectors.append(obj.collection.collector) collectors.append(obj.collector) - return "%s" % collectors + return u"".join(' ' + collector for collector in collectors).encode("utf-8") class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable): @@ -92,17 +95,18 @@ class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable): collec_location = [] for item in obj.items.all(): location = [] - location.append(item.location) - location_alias = LocationAlias.objects.filter(location__name=item.location) - location_rela = LocationRelation.objects.filter(location__name=item.location) - for rela in location_rela: - location.append(rela.ancestor_location) - for alias in location_alias: - location.append(alias) - for name in location: - if name and not name in collec_location: - collec_location.append(name) - return "%s" % collec_location + if item.location is not None: + location.append(item.location.name) + location_alias = LocationAlias.objects.filter(location__name=item.location) + location_rela = LocationRelation.objects.filter(location__name=item.location) + for rela in location_rela: + location.append(rela.ancestor_location.name) + for alias in location_alias: + location.append(alias.alias) + for name in location: + if name and not name in collec_location: + collec_location.append(name) + return u"".join(' ' + location for location in collec_location).encode("utf-8") def prepare_ethnic_group(self, obj): return "%s" % obj.ethnic_groups() @@ -114,12 +118,11 @@ class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable): materials = MediaItemPerformance.objects.all().filter(media_item__exact=item) for material in materials: if material.instrument and not material.instrument in instruments: - instruments.append(material.instrument) + instruments.append(material.instrument.name) if material.alias and not material.alias in instruments: - instruments.append(material.alias) - - return "%s" % instruments + instruments.append(material.alias.name) + return u"".join(' ' + instru for instru in instruments).encode("utf-8") def prepare_recorded_from_date(self, obj): if obj.recorded_from_year != 0: -- 2.39.5