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,
-REINDEX=False
+REINDEX=True
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'])
#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()
#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()
<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>
--- /dev/null
+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
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 = []