我有一个要求,需要在名称上进行自定义评分。为了简单起见,我可以说,如果我搜索史密斯'对于索引中的名称,逻辑应该是:
if input = exact 'Smith' then score = 100%
else
if input = phonetic match then
score = <depending upon fuzziness match of input with name>%
end if
end if;
我能够搜索模糊度为1的文档,但我不知道如何根据它的模糊程度给出自定义分数。谢谢!
更新: 我经历了一个与我的要求相同的帖子,并提到该人通过使用本机脚本解决了它。我的问题仍然存在,如何根据相似距离实际得到分数,以便可以在原生脚本中使用:
该职位: https://discuss.elastic.co/t/fuzzy-query-scoring-based-on-levenshtein-distance/11116
帖子中要查找的文字: &#34;对于未来的读者,我通过创建自定义分数查询解决了这个问题 编写(本机)脚本来处理评分。&#34;
答案 0 :(得分:0)
您可以使用rescore函数查询(docs here)来实现此搜索逻辑。
这里有一个可能的例子:
{
"query": {
"function_score": {
"query": { "match": {
"input": "Smith"
} },
"boost": "5",
"functions": [
{
"filter": { "match": { "input.keyword": "Smith" } },
"random_score": {},
"weight": 23
}
]
}
}
}
在这个例子中,我们有一个映射,输入字段索引为text和keyword(input.keyword用于完全匹配)。我们重新评分完全匹配术语的文件&#34; Smith&#34;与第一个查询匹配的所有文档相比得分更高(在示例中是匹配,但在您的情况下将是具有模糊性的查询)。
您可以控制调整权重参数的重新评分效果。