Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@ketanbhatt
Created September 23, 2018 03:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ketanbhatt/ddb3c0706e9950e4ce7162bf10be93d7 to your computer and use it in GitHub Desktop.
Save ketanbhatt/ddb3c0706e9950e4ce7162bf10be93d7 to your computer and use it in GitHub Desktop.
Django Haystack fix EdgeNGram Analyzer
class StandardAnalyzerElasticBackend(ElasticsearchSearchBackend):
SET_ANALYZE_STANDARD_FOR_SEARCH = getattr(settings, 'SET_ANALYZE_STANDARD_FOR_HAYSTACK_SEARCH', False)
DEFAULT_SETTINGS = {
'settings': {
"analysis": {
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["haystack_ngram", "lowercase"]
},
"edgengram_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["haystack_edgengram", "lowercase"]
}
},
"tokenizer": {
"haystack_ngram_tokenizer": {
"type": "nGram",
"min_gram": 3,
"max_gram": 15,
},
"haystack_edgengram_tokenizer": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 26,
"side": "front"
}
},
"filter": {
"haystack_ngram": {
"type": "nGram",
"min_gram": 3,
"max_gram": 15
},
"haystack_edgengram": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 26
}
}
}
}
}
def build_search_kwargs(self, query_string, **kwargs):
search_kwargs = super(StandardAnalyzerElasticBackend, self).build_search_kwargs(query_string, **kwargs)
if self.SET_ANALYZE_STANDARD_FOR_SEARCH:
try:
search_kwargs['query']['filtered']['query']['query_string']['analyzer'] = 'standard'
except KeyError:
pass
return search_kwargs
class StandardAnalyzerElasticSearchEngine(ElasticsearchSearchEngine):
backend = StandardAnalyzerElasticBackend
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment