elasticsearch 使用haystack在弹性搜索中忽略重音,elasticsearch,search-engine,django-haystack,non-ascii-characters,elasticsearch,Search Engine,Django Haystack,Non Ascii Characters" /> elasticsearch 使用haystack在弹性搜索中忽略重音,elasticsearch,search-engine,django-haystack,non-ascii-characters,elasticsearch,Search Engine,Django Haystack,Non Ascii Characters" />

elasticsearch 使用haystack在弹性搜索中忽略重音

elasticsearch 使用haystack在弹性搜索中忽略重音,elasticsearch,search-engine,django-haystack,non-ascii-characters,elasticsearch,Search Engine,Django Haystack,Non Ascii Characters,我使用elasticsearch和haystack来提供搜索。我希望用户搜索语言以外的英语。例如,目前正在尝试使用希腊语 我怎么能在搜索任何东西时忽略重音呢。例如,假设我输入ΑνΔρρέας(带重音),其返回结果与之匹配 但当我输入ΑνΔρεας时,它不会返回任何结果。搜索引擎应该提供任何包含“ΑνΔρέας”和“ΑνΔρεας”的结果(第二个结果不带重音) 有人能指出如何解决这个问题吗 如果我需要弹性搜索、搜索索引等的帖子设置,请告诉我 编辑: 以下是我的索引设置: ELASTICSEARCH

我使用elasticsearch和haystack来提供搜索。我希望用户搜索语言以外的英语。例如,目前正在尝试使用希腊语

我怎么能在搜索任何东西时忽略重音呢。例如,假设我输入ΑνΔρρέας(带重音),其返回结果与之匹配

但当我输入ΑνΔρεας时,它不会返回任何结果。搜索引擎应该提供任何包含“ΑνΔρέας”和“ΑνΔρεας”的结果(第二个结果不带重音)

有人能指出如何解决这个问题吗

如果我需要弹性搜索、搜索索引等的帖子设置,请告诉我

编辑:

以下是我的索引设置:

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_"]
                 }
             }
         }
     }
}
这显示在
搜索索引.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='Ανδρεας')


谢谢。

您需要在分析/查询管道中添加
ascifolding
令牌过滤器


这基本上去除了单词中的任何重音,这样以后你就可以很容易地通过/不通过重音搜索找到它们。

我已经添加了索引设置。你能告诉我我遗漏了什么吗?请同时添加你正在使用的映射和查询。添加了更多详细信息。你的意思是在索引设置中映射吗?我只是想确保你确实使用了字段的分析器+似乎你使用了一些映射器来构建查询,你能发布原始查询吗?同样的问题,你找到解决方案了吗?可能是重复的
results = SearchQuerySet().model(Profile).autocomplete(text='Ανδρέας')