gpt4 book ai didi

elasticsearch - 使用 haystack 忽略 Elasticsearch 中的重音

转载 作者:行者123 更新时间:2023-12-01 23:56:14 24 4
gpt4 key购买 nike

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

在搜索任何内容时如何忽略重音。例如。假设我输入 Ανδρέας (带重音符号),其返回结果与之匹配。

但是当我输入 Ανδρεας 时,它没有返回任何结果。搜索引擎应该带来任何带有“Ανδρέας”和“Ανδρεας”的结果(第二个没有重音)。

有人可以指出如何解决问题吗?

如果我需要 Elasticsearch 、search_indexex 等的帖子设置,请告诉我。

编辑:

这是我的索引设置:

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='Ανδρέας')

谢谢。

最佳答案

您需要添加 asciifolding token 过滤器为您分析/查询管道 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-asciifolding-tokenfilter.html

这基本上从您的单词中删除了任何重音,以便您以后可以轻松地找到它们,无论是否使用重音搜索。

关于elasticsearch - 使用 haystack 忽略 Elasticsearch 中的重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23593770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com