弹性搜索功能得分,增加"查询中匹配项数"的权重(协调)

Ali*_*Ali 7 elasticsearch

我想使用elasticsearch函数得分来定制评分,这些是我的排名优先级:

  1. 具有查询的常用术语的数量(例如,在查询中具有4个术语中的3个的文档应当排名高于在查询中具有4个术语中的2个的文档,无论每个术语的tf/idf得分是多少).在弹性文档中,它被称为协调因子.

  2. 术语相关性之和.(TF/IDF)

  3. 文件受欢迎程度(按受欢迎程度提升的每个文件的投票数)

这是目前使用的elasticsearch请求的主体:

body = {
        "query": {
            "function_score": {
                "query": {
                    {'match': {'text': query}}
                },
                "functions": [
                    {
                        "field_value_factor": {
                            "field": "ducoumnet_popularity",
                        }
                    }
                ],
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是该请求不满足第一优先级.例如,可能存在文档A,其与查询的共同术语比文档B少,但由于其常用术语具有更多tf/idf分数,因此文档A的排名高于文档B.

为了防止这种情况,我认为最好的方法是通过协调因素提高文档得分.有没有办法做到这一点?与此请求类似的内容:

body = {
        "query": {
            "function_score": {
                "query": {
                    {'match': {'text': query}}
                },
                "functions": [
                    {
                        "field_value_factor": {
                            "field": "ducoumnet_popularity",
                        },
                        "field_value_factor": {
                            "field": "_coordination"
                            "weight": 10
                        }
                    }
                ],
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ali*_*Ali 0

我没有找到这个问题的确切答案,但它可能会帮助某人知道您可以使用 限制结果中文档的最小精度 minimum_should_match

{
    "query": {
        "match": {
            "content": {
                "query": "quick brown dog",
                "minimum_should_match": 75%
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它接受许多不同的配置。更多解释: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html