elasticsearch 在Elasticsearch中,仅提升分数接近相同的结果,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch 在Elasticsearch中,仅提升分数接近相同的结果,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch 在Elasticsearch中,仅提升分数接近相同的结果

elasticsearch 在Elasticsearch中,仅提升分数接近相同的结果,elasticsearch,lucene,elasticsearch,Lucene,我使用下面的查询来搜索姓名数据库,允许模糊匹配,但优先考虑精确匹配 "query": { "bool": { "should": [ { "match": { "name": { "query": "x", "operator": "and",

我使用下面的查询来搜索姓名数据库,允许模糊匹配,但优先考虑精确匹配

"query": {
    "bool": {
        "should": [
            {
                "match": {
                    "name": {
                        "query": "x",
                        "operator": "and",
                        "boost": 10
                    }
                }
            },
            {
                "match": {
                    "name": {
                        "query": "x",
                        "fuzziness": "AUTO",
                        "operator": "and"
                    }
                }
            },
            {
                "match": {
                    "altname": {
                        "query": "x",
                        "fuzziness": "AUTO",
                        "operator": "and"
                    }
                }
            }
        ]
    }
}
数据库包含具有相同名称的条目。如果出现这种情况,我想增加第二个字段来增加这些条目,我们称之为
weight
。但是,我只希望在分数(接近)相同的结果子集之间应用提升,而不是所有结果

具有相同名称的结果可能会得到稍有不同的分数,因为它们受到
altname
字段上相关性的影响,这一事实使情况更加复杂

例如,查询
dog
可以得到3个结果:

  • 狗[id 1,得分2.3,体重10]
  • 狗[id 2,得分2.2,体重20]
  • 狗[id 3,得分1,体重100]
我正在寻找一个可以将id为2的结果提升到最高分的查询。id为3的结果应该始终位于底部,因为它的相关性很差,无论其权重如何。理想情况下,使用可调参数调整分数因子与权重因子


在Elasticsearch中,有没有任何方法可以在不破坏性能的情况下一次完成这项工作?

看起来我已经找到了答案

首先,我意识到我原来问题中的例子过于复杂。我把范围缩小到:“如何编写一个“blub”查询,它以2、3、1的顺序返回以下文档”

因此:对于分数相同(或非常相似)的两份文件,应将重量用作平局破坏者。但分数明显较低的文件永远不应该被允许胜过其他结果,不管其权重如何

我将数据加载到优秀的Play工具中:并开始实验

原来
log2p
修饰符完全符合我的预期。在现实世界的数据集上重复这个过程,一切看起来都和预期的一模一样

function_score: 
    query:
        match:
            name: blub
    field_value_factor:
        field: weight
        modifier: log2p

对于分数来说,多重
weight
,即
boost\u模式:多重
,在OPI中的示例中,它起作用,稍微更改了
weight
数字,以澄清问题。由于模糊匹配,结果通常包括得分明显低于顶级结果的匹配。我不想让它们被提升到顶部,不管它们的权重如何。您可以使用函数分数仅在非模糊查询匹配上应用权重,下面提供了一个示例答案。
function_score: 
    query:
        match:
            name: blub
    field_value_factor:
        field: weight
        modifier: log2p