elasticsearch ngram匹配对相关性较低的文档给予相同的分数
我正在我的elasticsearch索引中搜索Bob Smith。结果鲍勃·史密斯和博比·史密斯都以相同的分数回答了问题。我希望Bob Smith有更高的分数,以便它出现在我的结果集中的第一位。为什么分数相等 这是我的问题
elasticsearch ngram匹配对相关性较低的文档给予相同的分数,
elasticsearch,match,n-gram,relevance,
elasticsearch,Match,N Gram,Relevance,我正在我的elasticsearch索引中搜索Bob Smith。结果鲍勃·史密斯和博比·史密斯都以相同的分数回答了问题。我希望Bob Smith有更高的分数,以便它出现在我的结果集中的第一位。为什么分数相等 这是我的问题 { "query": { "query_string": { "query": "Bob Smith", "fields": [ "text_field"
{
"query": {
"query_string": {
"query": "Bob Smith",
"fields": [
"text_field"
]
}
}
}
下面是我的索引设置。我正在使用此处描述的ngram令牌过滤器:
以下是我查询的结果
"hits": [
{
"_index": "contacts_5test",
"_type": "_doc",
"_id": "1",
"_score": 0.69795835,
"_source": {
"text_field": "Bob Smith"
}
},
{
"_index": "contacts_5test",
"_type": "_doc",
"_id": "2",
"_score": 0.69795835,
"_source": {
"text_field": "Bobbi Smith"
}
}
]
如果我改为搜索Bobbi Smith,elastic将返回两个文档,但Bobbi Smith的分数更高。这更有意义。我能够重现您的问题,原因是使用了您的
ngram\u过滤器,它不会为bob
创建任何令牌,因为令牌的最小长度应为4
,而标准令牌发生器创建bob
令牌,但随后它会在您提到的minu gram
as4
的ngram\u过滤器中过滤掉
即使我试着用更少的minu gram
length到3
,这将创建令牌,但问题是bob
和bobbie
将具有相同的bob
令牌,因此它们的得分将相同
当您搜索Bobbi Smith
时,则Bobbi
即确切的代币将仅出现在一个文档中,因此您会得到更高的分数
注意:-请使用和来检查生成的代币以及这些代币如何匹配,这将帮助您了解问题和我的详细解释,我的是否有办法调整ngram过滤器,以便在搜索“Bob”时让Bobbi显示在结果中?你的意思是Bobbi
不出现在搜索结果中或分数较低?@GNG,这也像是一个新的要求,我尝试过,但不容易实现,请你投票接受这个答案,因为它提供了你寻求的答案,并在这里询问另一个问题和评论,我将对此进行调查。
"hits": [
{
"_index": "contacts_5test",
"_type": "_doc",
"_id": "1",
"_score": 0.69795835,
"_source": {
"text_field": "Bob Smith"
}
},
{
"_index": "contacts_5test",
"_type": "_doc",
"_id": "2",
"_score": 0.69795835,
"_source": {
"text_field": "Bobbi Smith"
}
}
]