Я использую elasticsearch вместе со стогом сена, чтобы обеспечить поиск. Я хочу, чтобы пользователь выполнял поиск на другом языке, кроме английского. Например. в настоящее время пытается с греческим.игнорировать акценты в эластичном поиске с стоком сена
Как я могу игнорировать акценты во время поиска чего-либо. Например. допустим, если я войду в Ανδρέας (с акцентами), его результаты возвращения совпадут с ним.
Но когда я вхожу в Ανδρεας, он не возвращает никаких результатов. Поисковая система должна приносить любые результаты, имеющие «Ανδρέας», но также и «Ανδρεας» (вторая не акцентирована).
Может кто-нибудь указать, как решить проблему?
Пожалуйста, дайте мне знать, если мне нужно постнастройки для упругого поиска, search_indexex и т.д.
EDIT:
Вот мои настройки индекса:
ELASTICSEARCH_INDEX_SETTINGS = {
'settings': {
"analysis": {
"analyzer": {
"myanalyzer_search": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"greek_lowercase_filter",
"my_stop_filter",
"greek_stem_filter",
"english_stem_filter",
"my_edge_ngram_filter",
"asciifolding"
]
},
"myanalyzer_index": {
"type": "custom",
"tokenizer": "edgeNGram",
"filter": [
"greek_lowercase_filter",
"my_stop_filter",
"greek_stem_filter",
"english_stem_filter",
"my_edge_ngram_filter",
"asciifolding"
]
},
},
"tokenizer": {
"my_edge_ngram_tokenizer": {
"type": "edgeNGram",
"min_gram": "2",
"max_gram": "18",
"token_chars": ["letter"]
}
},
"filter": {
"my_edge_ngram_filter": {
"type": "edgeNGram",
"min_gram": 3,
"max_gram": 18
},
"greek_stem_filter": {
"type": "stemmer",
"name": "greek"
},
"greek_lowercase_filter": {
"type": "lowercase",
"language": "greek"
},
"english_stem_filter": {
"type": "stemmer",
"name": "english"
},
"my_stop_filter": {
"type": "stop",
"stopwords": ["_greek_", "_english_"]
}
}
}
}
}
Это присутствует в search_index.py
:
class ProfileIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
sorted_title = indexes.CharField(model_attr='title', indexed=False, stored=True)
employment_history = indexes.EdgeNgramField(model_attr='employment_history', null=True)
def get_model(self):
return SellerProfile
def index_queryset(self, using=None):
return self.get_model().objects.all()
.........
А вот шаблон:
{{ object.user.get_full_name }}
{{ object.title }}
{{ object.bio }}
{{ object.employment_history }}
{{ object.education }}
Я делаю запрос как следующий:
results = SearchQuerySet().model(Profile).autocomplete(text='Ανδρεας')
и
results = SearchQuerySet().model(Profile).autocomplete(text='Ανδρέας')
Спасибо.
Возможный дубликат [Django Haystack: поиск термина с и без акцентов] (http://stackoverflow.com/questions/2240880/django-haystack-search-for-a-term-with-and-without- акценты) – laffuste