]> git.parisson.com Git - telemeta.git/commitdiff
Autocompletion sur cote, instruments (1 seul) et collecteur
authormathieu <mathieu.boye28@gmail.com>
Mon, 18 Apr 2016 12:12:15 +0000 (14:12 +0200)
committermathieu <mathieu.boye28@gmail.com>
Mon, 18 Apr 2016 12:12:15 +0000 (14:12 +0200)
Former-commit-id: 2c4cc503bee00074f101de0af6d691aa28b386f9

.gitignore
.idea/vcs.xml [new file with mode: 0644]
env/debug.env
modif telemeta
telemeta/forms/haystack_form.py
telemeta/search_indexes.py
telemeta/templates/search/advanceSearch.html
telemeta/util/backend.py
telemeta/views/search.py

index 78da6b0ffdfdd545eef067ea67ed445a08a08705..09c020dde0bc0bbe0880a7d047e40cc01f23ae46 100644 (file)
@@ -30,3 +30,5 @@ pip-log.txt
 
 #Mr Developer
 .mr.developer.cfg
+
+.idea/*
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644 (file)
index 0000000..94a25f7
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
index a19e34770877c2c4104fc1cee497ee521afd6e88..7a9fbbcc2efd668f22107e8e9316a87bd0755b0f 100644 (file)
@@ -18,4 +18,4 @@ BROKER_URL=redis://broker:6379/0
 # If this is True, all tasks will be executed locally by blocking until the task returns.
 CELERY_ALWAYS_EAGER=False
 
-REINDEX=False
+REINDEX=True
index b9eb8197f2ba408919cfecd68e7b5a2368b4162d..0f0bdeca52a898eab667c31e12188a80d366260d 100644 (file)
@@ -1,19 +1,9 @@
-collecteur dans recherche indispo
-
-liste de lecture -> tableau de bord : periode enregistrement
-
 pas  assez d items dans recherche
 
-autocompletion sur instruments/collecteur (listes fermees)
-
-date enregistrement : min 1900 mais date avant apparaissent FAIT ???
-
-nb items qui ont instrument dans liste instruments + liste
-
-filtre inedits/edites pour les items : passer par la collection puis sa cote (I : inedit, E : edites)
-
 filtres apparait 1 fois sur 2
 
+nb items enum + liste
+
 FAIT :
 
 apres suppression collection dans liste de lecture : laisser ouvert par defaut celle qui a ete ouverte en dernier
@@ -23,3 +13,17 @@ tri dans les liste de lecture partiellement dispo (seulement les 4 premieres)
 tri dans recherche avancee/simple
 
 page 643 erreur
+
+nb items qui ont instrument dans liste instruments + liste
+
+liste de lecture -> tableau de bord : periode enregistrement
+
+collecteur dans recherche indispo
+
+date enregistrement : min 1900 mais date avant apparaissent
+
+autocompletion sur instruments/collecteur (listes fermees)
+
+VERIF PROD :
+
+filtre inedits/edites pour les items : passer par la collection puis sa cote (I : inedit, E : edites)
index 449d4a62ad27e74470fc84aacaca98d9de859e6e..8a81d77616bad4e42e98ac7e8c839f421093ffdd 100644 (file)
@@ -84,18 +84,11 @@ class HayAdvanceForm(SearchForm):
         list_all_year = []
         list_collect = MediaCollection.objects.all()
         for collect in list_collect:
-            if collect.recorded_from_year != '0' and not collect.recorded_from_year in list_all_year:
+            if collect.recorded_from_year != 0 and not collect.recorded_from_year in list_all_year:
                 list_all_year.append(collect.recorded_from_year)
-            if collect.recorded_to_year != '0' and not collect.recorded_to_year in list_all_year:
+            if collect.recorded_to_year != 0 and not collect.recorded_to_year in list_all_year:
                 list_all_year.append(collect.recorded_to_year)
         list_all_year.sort()
-        if len(list_all_year) >= 2:
-            min_year = list_all_year[len(list_all_year) - 1]
-            for year in list_all_year:
-                if year != 0:
-                    if year < min_year:
-                        min_year = year
-            list_all_year = range(min_year, date.today().year + 1)
         list_year = []
         list_year.append(('', '----'))
         for year in list_all_year:
@@ -110,16 +103,9 @@ class HayAdvanceForm(SearchForm):
         list_all_year = []
         list_collect = MediaCollection.objects.all()
         for collect in list_collect:
-            if collect.year_published != '0' and not collect.year_published in list_all_year:
+            if collect.year_published != 0 and not collect.year_published in list_all_year:
                 list_all_year.append(collect.year_published)
         list_all_year.sort()
-        if len(list_all_year) >= 2:
-            min_year = list_all_year[len(list_all_year) - 1]
-            for year in list_all_year:
-                if year != 0:
-                    if year < min_year:
-                        min_year = year
-            list_all_year = range(min_year, date.today().year + 1)
         list_year = []
         list_year.append((0, '----'))
         for year in list_all_year:
@@ -175,7 +161,7 @@ class HayAdvanceForm(SearchForm):
             return self.no_query_found()
 
         if self.cleaned_data.get('q'):
-            sqs = sqs.filter(title__exact=self.cleaned_data['q'])
+            sqs = sqs.filter(title__contains=self.cleaned_data['q'])
 
         if self.cleaned_data.get('code'):
             sqs = sqs.filter(code__contains=self.cleaned_data['code'])
index 1480a9cea2ed6199d15e773d3307a18559be9c20..b54084b3a53d2e2401169f0928e63cf9461c30cd 100644 (file)
@@ -20,6 +20,8 @@
 from haystack import indexes
 from telemeta.models import *
 
+class InstrumentField(indexes.CharField):
+    field_type = 'instrument'
 
 class MediaItemIndex(indexes.SearchIndex, indexes.Indexable):
 
@@ -34,13 +36,12 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable):
 
     #advance search
     title = indexes.CharField(model_attr='title')
-    title_auto = indexes.NgramField(model_attr='title')
     code = indexes.CharField(model_attr='code', default='')
     location_principal = indexes.CharField(null='None', boost=1.05)
     location_relation = indexes.CharField()
     ethnic_group = indexes.CharField(model_attr='ethnic_group', default='')
-    instruments = indexes.NgramField(default='')
-    collectors = indexes.NgramField(model_attr='collector', default='')
+    instruments = InstrumentField(default='')
+    collectors = indexes.CharField(model_attr='collector', default='')
     recorded_from_date = indexes.DateField(model_attr='recorded_from_date', null='None')
     recorded_to_date = indexes.DateField(model_attr='recorded_to_date', null='None')
     year_published = indexes.IntegerField(model_attr='collection__year_published', default='')
@@ -84,7 +85,7 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable):
                 instruments.append(material.instrument.name)
             if material.alias is not None:
                 instruments.append(material.alias.name)
-        return u"".join(' ' + instru for instru in instruments)
+        return u"".join('|' + instru for instru in instruments)
 
     def prepare_collectors(self, obj):
         collectors = []
@@ -106,13 +107,12 @@ class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable):
 
     #advance search
     title = indexes.CharField(model_attr='title')
-    title_auto = indexes.NgramField(model_attr='title')
     code = indexes.CharField(model_attr='code', default='')
     location_principal = indexes.CharField(default='', boost=1.05)
     location_relation = indexes.CharField()
     ethnic_group = indexes.CharField(default='')
-    instruments = indexes.NgramField(default='')
-    collectors = indexes.NgramField(model_attr='collector', default='')
+    instruments = InstrumentField(default='')
+    collectors = indexes.CharField(model_attr='collector', default='')
     recorded_from_date = indexes.DateField(model_attr='recorded_from_year', null=True)
     recorded_to_date = indexes.DateField(model_attr='recorded_to_year', null=True)
     year_published = indexes.IntegerField(model_attr='year_published', default='')
@@ -161,7 +161,7 @@ class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable):
 
                 if material.alias and not material.alias in instruments:
                     instruments.append(material.alias.name)
-        return u"".join(' ' + instru for instru in instruments)
+        return u"".join('|' + instru for instru in instruments)
 
     def prepare_recorded_from_date(self, obj):
         if obj.recorded_from_year != 0:
@@ -188,8 +188,8 @@ class MediaCorpusIndex(indexes.SearchIndex, indexes.Indexable):
     #content_auto = indexes.EdgeNgramField(model_attr='content')
 
     #advance search
-    title = indexes.NgramField(model_attr='title')
-    code = indexes.NgramField(model_attr='code', default='')
+    title = indexes.CharField(model_attr='title')
+    code = indexes.CharField(model_attr='code', default='')
     #location_principal = indexes.CharField(default='', boost=1.05)
     #location_relation = indexes.CharField()
     #ethnic_group = indexes.CharField(default='')
@@ -218,8 +218,8 @@ class MediaFondsIndex(indexes.SearchIndex, indexes.Indexable):
     #content_auto = indexes.EdgeNgramField(model_attr='content')
 
     #advance search
-    title = indexes.NgramField(model_attr='title')
-    code = indexes.NgramField(model_attr='code', default='')
+    title = indexes.CharField(model_attr='title')
+    code = indexes.CharField(model_attr='code', default='')
     #location_principal = indexes.CharField(default='', boost=1.05)
     #location_relation = indexes.CharField()
     #ethnic_group = indexes.CharField(default='')
index dcc86f36c9de5961849ee62bf99213ede0b64557..49611ed73322550066770a565631a5c81fd4823d 100644 (file)
 </script>
     <script>
 $(function(){
-    $('#id_q[type="search"], #id_code, #id_location').each(function(){
+    $('#id_code, #id_instruments, #id_collectors').each(function(){
         var self = this;
         $(this).autocomplete({
             source : function(requete, reponse) {
index 1bb26c8b4c9a5c677636de5cdf978e0d85098ddc..0d2416900ae234d69cb62324ff82d6cfac303a5d 100644 (file)
@@ -3,12 +3,16 @@ from haystack.backends.elasticsearch_backend import *
 class CustomElasticBackend(ElasticsearchSearchBackend):
 
     def setup(self):
-       FIELD_MAPPINGS.get('ngram')['search_analyzer']='startspacelower'
+
+        DEFAULT_FIELD_MAPPING['analyzer']='trim_lower_analyzer'
+        FIELD_MAPPINGS['instrument']={'type':'string', 'analyzer':'pipe_analyzer', 'search_analyzer': 'trim_lower_analyzer'}
         eb = super(CustomElasticBackend, self)
-        eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('analyzer')['startspacelower']={"type":"pattern", "pattern":"^\\s+", "filter": ["lowercase"]}
-        ngram = eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('analyzer').get('ngram_analyzer')
-        ngram['tokenizer']='keyword'
-        ngram.get('filter').insert(0, 'trim')
+        eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('tokenizer')['pipe_tokenizer']=\
+            {'type': 'pattern', 'pattern': '\\|'}
+        eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('analyzer')['trim_lower_analyzer']=\
+            {"type": "custom", "tokenizer": "keyword", "filter": ["trim", "lowercase", "asciifolding"]}
+        eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('analyzer')['pipe_analyzer']=\
+            {'type':'custom', 'tokenizer': 'pipe_tokenizer', 'filter': ['trim', 'lowercase', 'asciifolding']}
         eb.setup()
 
 class CustomElasticEngine(ElasticsearchSearchEngine):
index 01271cb9fc2364269ad241c721b6f1d203297c18..bda81d6b5826202fbb96f2952666aa2b606d0235 100644 (file)
@@ -163,16 +163,21 @@ class HaystackAdvanceSearch(SavedSearchView):
 
 def autocomplete(request):
     sqs = SearchQuerySet().load_all()
-    print(type)
-    if request.GET.get('attr', '') == "q":
-        sqs = sqs.filter(title_auto__exact=request.GET.get('q', ''))[:10]
-        suggestions = [result.title for result in sqs]
-    elif request.GET.get('attr', '') == "location":
-        sqs = sqs.filter(location_principal__contains=request.GET.get('q', ''))[:10]
-        suggestions = [result.location_principal for result in sqs]
+    if request.GET.get('attr', '') == "instruments":
+        sqs = sqs.filter(instruments__contains=request.GET.get('q', ''))[:10]
+        instrus = [result.instruments for result in sqs]
+        suggestions = []
+        for chaine in instrus:
+            for word in chaine.split('|'):
+                if word != "" and escapeAccentAndLower(request.GET.get('q', '')) in escapeAccentAndLower(word):
+                    suggestions.append(word)
     elif request.GET.get('attr', '') == "code":
         sqs = sqs.filter(code__contains=request.GET.get('q', ''))[:10]
         suggestions = [result.code for result in sqs]
+
+    elif request.GET.get('attr', '') == "collectors":
+        sqs = sqs.filter(collectors__contains=request.GET.get('q', ''))[:10]
+        suggestions = [result.collectors for result in sqs]
     else:
         suggestions = []
 
@@ -182,3 +187,8 @@ def autocomplete(request):
         'results': suggestions
     })
     return HttpResponse(the_data, content_type='application/json')
+
+import unicodedata
+
+def escapeAccentAndLower(chaine):
+    return unicodedata.normalize('NFD', chaine).encode('ascii', 'ignore').lower()
\ No newline at end of file