gpt4 book ai didi

python - ElasticSearch term suggest on analyzed field 不返回任何建议

转载 作者:行者123 更新时间:2023-11-28 19:23:38 27 4
gpt4 key购买 nike

我想使用 ElasticSearch 术语建议功能来更正拼写(您是说...?)。这里是官方documentation :

这是我的(简化为基础)方案:

{
"settings": {
"analysis": {
"filter": {
"en_stop_filter": { "type": "stop", "stopwords": ["_english_"] },
"en_stem_filter": { "type": "stemmer", "name": "minimal_english" },
"de_stop_filter": { "type": "stop", "stopwords": ["_german_"] },
"de_stem_filter": { "type": "stemmer", "name": "minimal_german" }
},
"analyzer": {
"en_analyzer": { "type": "custom", "tokenizer": "icu_tokenizer", "filter": ["icu_folding", "icu_normalizer", "en_stop_filter", "en_stem_filter"] },
"de_analyzer": { "type": "custom", "tokenizer": "icu_tokenizer", "filter": ["icu_folding", "icu_normalizer", "de_stop_filter", "de_stem_filter"] }
}
}
},
"mappings": {
"blog": {
"_analyzer": { "path": "my_analyzer", "index": "no" },
"properties": {
"title": { "type": "string" },
"my_analyzer": { "type": "string", "index": "no" }
}
},
"photo": {
"properties": {
"tags_en": { "type": "string", "analyzer": "en_analyzer", "index_name": "tag_en" }
"tags_de": { "type": "string", "analyzer": "de_analyzer", "index_name": "tag_de" }
}
}
}
}

这就是通过 Python/Django 为 a) 我们的博客编制索引的数据:

data = ''
for i, p in enumerate(BlogPost.objects.all()):
data += '{"index": {"_id": "%s"}}\n' % p.pk
data += json.dumps({ "my_analyzer": p.language+"_analyzer", "title": p.title })+'\n'
resp = requests.put(ELASTICSEARCH_URL+'blog/_bulk', data=data)

我正在根据每篇博文的语言(p.language = 'de' 或 'en')设置分析器,德语英语

我能够(通过 Python)搜索这个索引,并且我确实得到了这些参数返回的拼写建议:

{
"query": {
"query_string": {
"query": q,
"analyzer": "en_analyzer"
}
},
"suggest": {
"my_suggestion": {
"text": q,
"term": {
"size": 1,
"field": "title"
}
}
}
}

然而,我真正需要的是搜索我们的照片方案的拼写建议,它由这个索引(Python/Django):

for p in Photo.objects.all():
data += '{"index": {"_id": "%s"}}\n' % p.pk
data += json.dumps({
"tags_cs": p.tags_en,
"tags_de": p.tags_de
})+'\n'
resp = requests.put(ELASTICSEARCH_URL+'photo/_bulk', data=data)

p.tags_en 和 p.tags_de 可以作为逗号分隔的标签字符串或实际的字符串列表进行索引。两者都适用于 ElasticSearch,它似乎对这个问题没有影响。

搜索照片有效,无论是英语还是德语,但没有返回任何拼写建议:

{
"query": {
"query_string": {
"query": q,
"fields": [
"tags_en"
],
"analyzer": "en_analyzer"
}
},
"suggest": {
"my_suggestion": {
"text": q,
"term": {
"size": 1,
"field": "tags_en"
}
}
}
}

如果我为建议词定义一个分析器,这没有什么区别,如下所示:

{
"query": {
"query_string": {
"query": q,
"fields": [
"tags_en"
],
"analyzer": "en_analyzer"
}
},
"suggest": {
"my_suggestion": {
"text": q,
"term": {
"size": 1,
"field": "tags_en",
"analyzer": "en_analyzer"
}
}
}
}

请注意博客文章和照片分析的区别:我们的博客文章每篇文章使用一种语言进行分析。通过方案中的 my_analyzer 字段。然而,我们的照片是按场分析的。我们确实有 20 种语言(这里只显示了两种语言以使代码尽可能小)并且每个标记字段都进行了相应的分析。如果我删除这种类型的照片分析,我也会在那里得到建议,但我们确实需要基于现场的分析器。

所以这个问题一定与分析器有关,但我完全被困住了。有什么想法吗?

最佳答案

一个可行的解决方案/变通方法是简单地在方案中包含一个未分析的字段,并仅匹配该字段的术语建议。它对我们有用,但是没有这些额外数据应该是可能的。

关于python - ElasticSearch term suggest on analyzed field 不返回任何建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647236/

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