5👍
Omg I made it working.
For anyone dealing with this – analyzers are defined on each "field" in the mapping. In other words, in order to attach analyzer to the title
field our shop/documents.py has to look like this:
from elasticsearch_dsl import analyzer, tokenizer
autocomplete_analyzer = analyzer('autocomplete_analyzer',
tokenizer=tokenizer('trigram', 'nGram', min_gram=1, max_gram=20),
filter=['lowercase']
)from elasticsearch_dsl import analyzer, tokenizer
@registry.register_document
class CategoryDocument(Document):
#title: fields.TextField(analyzer=autocomplete_analyzer, search_analyzer='standard') # Here I'm trying to use the analyzer specified above <-- This was extremely incorrect, due to the colon in definition, I don't know how I missed it but I did...
title = fields.TextField(required=True, analyzer=autocomplete_analyzer) # This is it....
class Index:
name = 'categories'
settings = {
'number_of_shards': 1,
'number_of_replicas': 0,
'max_ngram_diff': 20 # This seems to be important due to the constraint for max_ngram_diff beeing 1
}
class Django:
model = Category
fields = [
# 'title' <-- Notice, I removed this field, it would be redeclaration error
# In reality here I have more fields
]
And it works flawlessly…
0👍
I turned off fuzziness='auto'
, because on large volumes, getting the result of the request slowed down significantly.
Here is the reference where I found this soltion that helped me.
Source:stackexchange.com