gpt4 book ai didi

elasticsearch - 弹性ngram优先考虑整个单词

转载 作者:行者123 更新时间:2023-12-03 02:26:28 26 4
gpt4 key购买 nike

我正在尝试建立具有数百万个可能值的自动完成功能。我设法用两种不同的方法match和ngram做到了。问题是匹配要求用户键入整个单词,而ngram返回的结果很差。如果没有匹配结果,有没有办法只返回n​​gram结果?

方法1:匹配

返回非常相关的结果,但要求用户输入完整的单词

//mapping
analyzer: {
std_english: {
type: 'standard',
stopwords: '_english_',
},
}

//search
query: {
bool: {
must: [
{ term: { semanticTag: type } },
{ match: { search } }
]}
}


方法2:ngram

返回差的比赛
//mapping
analysis: {
filter: {
autocomplete_filter: {
type: 'edge_ngram',
min_gram: 1,
max_gram: 20,
},
},
analyzer: {
autocomplete: {
type: 'custom',
tokenizer: 'standard',
filter: ['lowercase', 'autocomplete_filter'],
},
},


//search
query: {
bool: {
must: [
{ term: { semanticTag: type } },
{ match: {
term: {
query: search,
operator: 'and',
}
}
}
]}
}

最佳答案

尝试将查询更改为这样的内容-

{
"query": {
"bool": {
"must": [
{
"term": {
"semanticTag": "type"
}
},
{
"match_phrase_prefix": {
"fieldName": {
"query": "valueToSearch"
}
}
}
]
}
}
}

您可以使用 match_phrase_prefix,通过使用该用户将不需要键入整个单词,用户键入且以索引字段数据开头的任何内容都将被返回。
请注意,这还将从索引文档中的任何可用中间词中提取结果。
例如如果在一个字段中索引的数据类似于- "lorem ipsum"和用户类型 "ips",那么您将获得整个文档以及其他以 "ips"开头的文档
您可以使用标准分析仪或定制分析仪,必须检查哪种分析仪更适合您的用例。根据有问题的信息,上述方法可以与 standard analyzer一起使用。

关于elasticsearch - 弹性ngram优先考虑整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60888010/

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