gpt4 book ai didi

Elasticsearch:使用 Ngrams 评分

转载 作者:行者123 更新时间:2023-11-29 02:53:58 30 4
gpt4 key购买 nike

我有一个直截了当的问题,我将 ngram 用于部分匹配。实现效果很好,但得分结果并不像我希望的那样有效。我希望我的分数结果看起来像这样:

  • 柯:.1
  • Kev:.2
  • 凯维:.3
  • 凯文:.4

相反,我得到以下结果,如果字段匹配,则得分相同:

  • 柯:.4
  • Kev:.4
  • 凯维:.4
  • 凯文:.4

设置:

 settings: {
analysis: {
filter: {
ngram_filter: {
type: 'edge_ngram',
min_gram: 2,
max_gram: 15
}
},
analyzer: {
ngram_analyzer: {
type: 'custom',
tokenizer: 'standard',
filter: [
'lowercase',
'ngram_filter'
]
}
}
}
}

映射:

mappings: [{
name: 'voter',
_all: {
'type': 'string',
'analyzer': 'ngram_analyzer',
'search_analyzer': 'standard'
},
properties: {
last: {
type: 'string',
required : true,
include_in_all: true,
analyzer: 'ngram_analyzer',
search_analyzer: 'standard'
},
first: {
type: 'string',
required : true,
include_in_all: true,
analyzer: 'ngram_analyzer',
search_analyzer: 'standard'
},

}

}]

查询:

GET /user/_search
{
"query": {
"match": {
"_all": {
"query": "Ke",
"operator": "and"

}
}
}
}

最佳答案

您可以使用 edgeNGram tokenizer 解决该问题而不是 edgeNGram 过滤器:

 settings: {
analysis: {
tokenizer: {
ngram_tokenizer: {
type: 'edge_ngram',
min_gram: 2,
max_gram: 15
}
},
analyzer: {
ngram_analyzer: {
type: 'custom',
tokenizer: 'ngram_tokenizer',
filter: [
'lowercase'
]
}
}
}
}

这样做的原因是 edgeNGram 过滤器将在相同位置写入给定标记的术语(非常类似于同义词),而 edgeNGram tokenizer 将创建具有不同位置的标记,从而影响长度归一化,从而影响分数。

请注意,这仅适用于 2.0 之前的 ES 版本,因为复合分数是根据所有 ngram 标记分数计算得出的,而在 ES 2.x 中,仅对匹配的标记进行评分。

关于Elasticsearch:使用 Ngrams 评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34618680/

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