2

Я использую 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='Ανδρέας') 

Спасибо.

+0

Возможный дубликат [Django Haystack: поиск термина с и без акцентов] (http://stackoverflow.com/questions/2240880/django-haystack-search-for-a-term-with-and-without- акценты) – laffuste

ответ

2

Вам нужно добавить asciifolding токены фильтра к вам Трубопроводному анализу/запрос http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-asciifolding-tokenfilter.html

Это в основном лишает какие-либо акценты от ваших слов, так что вы можете легко найти их позже с/без поиска с акцентами.

+0

Я добавил свои настройки индекса. Можете ли вы сказать, что мне не хватает? – nik

+0

Пожалуйста, добавьте также ваше сопоставление и запрос, который вы используете. – johno

+0

Добавлено больше деталей. Вы имеете в виду отображение в настройках индекса? – nik