]> git.parisson.com Git - telemeta.git/commitdiff
Amelioration recherche avancee
authormathieu <mathieu.boye28@gmail.com>
Thu, 28 Apr 2016 12:58:11 +0000 (14:58 +0200)
committermathieu <mathieu.boye28@gmail.com>
Thu, 28 Apr 2016 12:58:11 +0000 (14:58 +0200)
Amelioration mapping ES
Modif filtres haystack_form
Fix tri numerises
Fix liste autocompletion collecteurs ( plus repetition + separation ;ESPACE )

.gitignore
env/debug.env
telemeta/forms/haystack_form.py
telemeta/search_indexes.py
telemeta/templates/search/advanceSearch.html
telemeta/util/backend.py
telemeta/views/search.py

index 09c020dde0bc0bbe0880a7d047e40cc01f23ae46..ec980f2d6e296e0738f664fefaeac70e258a79c0 100644 (file)
@@ -32,3 +32,4 @@ pip-log.txt
 .mr.developer.cfg
 
 .idea/*
+data/backup
index 7a9fbbcc2efd668f22107e8e9316a87bd0755b0f..a19e34770877c2c4104fc1cee497ee521afd6e88 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=True
+REINDEX=False
index ceace2d8657c7e8ee6f23771381f21386237fb29..cd47006fbf9f97c13f79aee9dc3283d93b2c6753 100644 (file)
@@ -167,7 +167,7 @@ class HayAdvanceForm(SearchForm):
             term = queryTerms.pop(0)
             if term == "ET" or term == "OU":
                 if valeur != "":
-                    sqTab.append(('instruments__contains', valeur.strip()))
+                    sqTab.append(('instruments__startswith', valeur.strip()))
                     valeur = ""
                 if term != operateur:
                     sqTab = [SQ(filtre) for filtre in sqTab]
@@ -182,7 +182,7 @@ class HayAdvanceForm(SearchForm):
             else:
                 valeur += term + " "
         if valeur != "":
-            sqTab.append(('instruments__contains', valeur.strip()))
+            sqTab.append(('instruments__startswith', valeur.strip()))
         sqTab = [SQ(filtre) for filtre in sqTab]
         return SQ(reduce(operator.and_, sqTab) if operateur == "ET" else reduce(operator.or_, sqTab))
 
index ff8d4df53474c61f54482f3655c0cbe4fe39427a..fc7475ae8035727eaea6961ef07a28cab17eb1ab 100644 (file)
@@ -20,6 +20,9 @@
 from haystack import indexes
 from telemeta.models import *
 
+class KeywordField(indexes.CharField):
+    field_type = 'keyword'
+
 class MediaItemIndex(indexes.SearchIndex, indexes.Indexable):
 
     text = indexes.CharField(document=True, use_template=True)
@@ -33,7 +36,7 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable):
 
     #advance search
     title = indexes.CharField(model_attr='title')
-    code = indexes.CharField(model_attr='code', default='')
+    code = KeywordField(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='')
@@ -88,7 +91,7 @@ class MediaItemIndex(indexes.SearchIndex, indexes.Indexable):
         collectors = []
         collectors.append(obj.collection.collector)
         collectors.append(obj.collector)
-        return u"".join(' ' + collector for collector in collectors)
+        return u"".join('; ' + collector for collector in collectors)
 
 
 class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable):
@@ -104,7 +107,7 @@ class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable):
 
     #advance search
     title = indexes.CharField(model_attr='title')
-    code = indexes.CharField(model_attr='code', default='')
+    code = KeywordField(model_attr='code', default='')
     location_principal = indexes.CharField(default='', boost=1.05)
     location_relation = indexes.CharField()
     ethnic_group = indexes.CharField(default='')
@@ -186,7 +189,7 @@ class MediaCorpusIndex(indexes.SearchIndex, indexes.Indexable):
 
     #advance search
     title = indexes.CharField(model_attr='title')
-    code = indexes.CharField(model_attr='code', default='')
+    code = KeywordField(model_attr='code', default='')
     #location_principal = indexes.CharField(default='', boost=1.05)
     #location_relation = indexes.CharField()
     #ethnic_group = indexes.CharField(default='')
@@ -216,7 +219,7 @@ class MediaFondsIndex(indexes.SearchIndex, indexes.Indexable):
 
     #advance search
     title = indexes.CharField(model_attr='title')
-    code = indexes.CharField(model_attr='code', default='')
+    code = KeywordField(model_attr='code', default='')
     #location_principal = indexes.CharField(default='', boost=1.05)
     #location_relation = indexes.CharField()
     #ethnic_group = indexes.CharField(default='')
index 3c2d03a2f6da6d307dfdbc6e4c45ac828fea682c..52a2519d6fe6e38a5442729500706ea0e579984a 100644 (file)
@@ -307,6 +307,7 @@ $(function() {
     selecteur.each(function () {
         var self = this;
         $(this).autocomplete({
+            minLength: 3,
             source: function (requete, reponse) {
                 $.ajax({
                     url: '/search/autocomplete/',
@@ -327,9 +328,34 @@ $(function() {
 
     activerAutocompletion($('#id_code, #id_instruments, #id_collectors'));
 
+
+    $.tablesorter.addParser({
+        id: 'numerised',
+        is:function (s) {
+            return false;
+        },
+        format: function(s, table, cell){
+            var _class = $(cell).find('center span').attr('class');
+            _class = _class == undefined ? 1 : 0
+            alert(_class);
+            return _class;
+        },
+        type: 'number'
+    });
+
     $.tablesorter.defaults.sortList = [[1,0]];
     
-    $("#searchtable").tablesorter({headers: {0:{sorter:false}, 2:{sorter:false}}} );
+    $("#searchtable").tablesorter({
+        debug: true,
+
+        headers: {
+
+            0:{sorter:false},
+            2: {sorter: 'numerised'}
+        }
+
+    });
+
 
     $('#dialog').dialog({
         autoOpen: false,
index 374bd19c566b612a31ef12875e84f0ad1c7f272b..17e542b702166f6d458743b339b7e71a6d48d110 100644 (file)
@@ -5,10 +5,15 @@ from haystack.backends.elasticsearch_backend import *
 class CustomElasticBackend(ElasticsearchSearchBackend):
 
     def setup(self):
-        DEFAULT_FIELD_MAPPING['analyzer']='snowball_asciifolding_analyzer'
+        DEFAULT_FIELD_MAPPING['analyzer']='whitespace_asciifolding_analyzer'
+        FIELD_MAPPINGS['keyword'] = {'type': 'string', 'analyzer':'lowercase_analyzer'}
         eb = super(CustomElasticBackend, self)
-        eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('analyzer')['snowball_asciifolding_analyzer']=\
-            {"type": "custom", "tokenizer": "letter", "filter": ["lowercase", "stop",  "asciifolding"]}
+        eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('tokenizer')['esc_scape_tokenizer']=\
+            {"type": "pattern", "pattern": "\\s|\\|"}
+        eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('analyzer')['whitespace_asciifolding_analyzer']=\
+            {"type": "custom", "tokenizer": "esc_scape_tokenizer", "filter": ["lowercase", "word_delimiter", "asciifolding"]}
+        eb.DEFAULT_SETTINGS.get('settings').get('analysis').get('analyzer')['lowercase_analyzer'] = \
+            {"type": "custom", "tokenizer": "keyword", "filter": ["lowercase"]}
         eb.setup()
 
 
index 10801655b932dd6b3787f8656cd4eec2f950e10b..37d21efdd7f7631f542a06ea7d4465f2662b064c 100644 (file)
@@ -165,7 +165,7 @@ class HaystackAdvanceSearch(SavedSearchView):
 def autocomplete(request):
     sqs = SearchQuerySet().load_all()
     if request.GET.get('attr', '') == "instruments":
-        sqs = sqs.filter(instruments__contains=request.GET.get('q', ''))[:10]
+        sqs = sqs.filter(instruments__startswith=request.GET.get('q', ''))
         instrus = [result.instruments for result in sqs]
         suggestions = []
         for chaine in instrus:
@@ -173,16 +173,25 @@ def autocomplete(request):
                 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]
+        sqs = sqs.filter(code__contains=request.GET.get('q', ''))
         suggestions = [result.code for result in sqs]
 
     elif request.GET.get('attr', '') == "collectors":
-        sqs = sqs.filter(collectors__startswith=request.GET.get('q', ''))[:10]
-        suggestions = [result.collectors for result in sqs]
+        sqs = sqs.filter(collectors__startswith=request.GET.get('q', ''))
+        collecteurs = [result.collectors for result in sqs]
+        suggestions = []
+        for chaine in collecteurs:
+            for word in chaine.split('; '):
+                if word != "" and escapeAccentAndLower(request.GET.get('q', '')) in escapeAccentAndLower(word):
+                    suggestions.append(word)
     else:
         suggestions = []
 
-    suggestions = list(set(suggestions))
+    if request.GET.get('attr', '') != 'code':
+        suggestions = list(set([word.strip().lower().title() for word in suggestions]))
+    else:
+        suggestions = list(set(suggestions))
+    suggestions.sort()
 
     the_data = json.dumps({
         'results': suggestions