]> git.parisson.com Git - telemeta.git/commitdiff
Autocompletion partiel + validation traduction
authormathieu <mathieu.boye28@gmail.com>
Mon, 11 Apr 2016 14:00:00 +0000 (16:00 +0200)
committermathieu <mathieu.boye28@gmail.com>
Mon, 11 Apr 2016 14:00:00 +0000 (16:00 +0200)
Former-commit-id: f5f757c6ca3c1b4699e479280b140390fb417921

app/sandbox/settings.py
env/index.env
telemeta/forms/haystack_form.py
telemeta/search_indexes.py
telemeta/templates/telemeta/home.html
telemeta/util/backend.py [new file with mode: 0644]
telemeta/views/search.py

index c31f79c783d15d3a874ae7fc9f2c35d4b890f02a..822b655ddcf53ea09acd8f903fc19a5c83e44f1f 100644 (file)
@@ -302,7 +302,8 @@ from worker import app
 
 HAYSTACK_CONNECTIONS = {
     'default': {
-        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
+        #'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
+        'ENGINE': 'telemeta.util.backend.CustomElasticEngine',
         'URL': 'http://search:9200/',
         'INDEX_NAME': 'haystack',
         'INLUDE_SPELLING': True,
index 0452bec4f74b81a347d2ba94be417ad475cf0af5..ff58cf33d5d54f915e76aa2ba0d4d4c39c76e727 100644 (file)
@@ -1 +1 @@
-REINDEX=False
+REINDEX=True
index ef96ef0a8e22c09411c8243b30fdd50ca6885908..449d4a62ad27e74470fc84aacaca98d9de859e6e 100644 (file)
@@ -175,7 +175,7 @@ class HayAdvanceForm(SearchForm):
             return self.no_query_found()
 
         if self.cleaned_data.get('q'):
-            sqs = sqs.filter(title__contains=self.cleaned_data['q'])
+            sqs = sqs.filter(title__exact=self.cleaned_data['q'])
 
         if self.cleaned_data.get('code'):
             sqs = sqs.filter(code__contains=self.cleaned_data['code'])
index 44031478fbaa03f8b2916d1b789e8a04f53fb050..1480a9cea2ed6199d15e773d3307a18559be9c20 100644 (file)
@@ -34,6 +34,7 @@ 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()
@@ -105,6 +106,7 @@ 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()
index 38564a39e8a63c5ef13e8b597720bbe8efda53e4..1a4b7ebcea86fd561ea126b84610cdcc3e11f615 100644 (file)
@@ -10,7 +10,7 @@
 
 <div class="btn-module">
  <center>
-  <button type="button" id="btn-black" class="btn btn-default" onclick="location.href='{%url "telemeta-fullaccess-items"%}'"> <span class="glyphicon glyphicon-play" aria-hidden="true"></span> {% trans "Access to free    public sound items" %}</a></button>
+  <button type="button" id="btn-black" class="btn btn-default" onclick="location.href='{%url "telemeta-fullaccess-items"%}'"> <span class="glyphicon glyphicon-play" aria-hidden="true"></span> {% trans "Access to free public sound items" %}</a></button>
  </center>
 </div>
 
diff --git a/telemeta/util/backend.py b/telemeta/util/backend.py
new file mode 100644 (file)
index 0000000..1bb26c8
--- /dev/null
@@ -0,0 +1,15 @@
+from haystack.backends.elasticsearch_backend import *
+
+class CustomElasticBackend(ElasticsearchSearchBackend):
+
+    def setup(self):
+       FIELD_MAPPINGS.get('ngram')['search_analyzer']='startspacelower'
+        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.setup()
+
+class CustomElasticEngine(ElasticsearchSearchEngine):
+    backend = CustomElasticBackend
index 3ec7a79ebe1baa5c95a429f5c1bee86a17cdcf85..01271cb9fc2364269ad241c721b6f1d203297c18 100644 (file)
@@ -165,13 +165,13 @@ def autocomplete(request):
     sqs = SearchQuerySet().load_all()
     print(type)
     if request.GET.get('attr', '') == "q":
-        sqs = sqs.filter(title__contains=request.GET.get('q', ''))[:5]
+        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', ''))[:5]
+        sqs = sqs.filter(location_principal__contains=request.GET.get('q', ''))[:10]
         suggestions = [result.location_principal for result in sqs]
     elif request.GET.get('attr', '') == "code":
-        sqs = sqs.filter(code__contains=request.GET.get('q', ''))[:5]
+        sqs = sqs.filter(code__contains=request.GET.get('q', ''))[:10]
         suggestions = [result.code for result in sqs]
     else:
         suggestions = []