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

时间:2015-10-18 11:00:36

标签: elasticsearch

我想使用弹性搜索功能得分来定制评分,这些是我的排名优先级:

  1. 查询的常用术语数量(例如,查询中包含4个术语中的3个的文档应排名高于查询中包含4个术语中的2个的文档,无论tf / idf得分多少每个学期)。在弹性文档中,它被称为coordination factor

  2. 术语相关性的总和。 (TF / IDF)

  3. 文档受欢迎程度(boosting by popularity中描述的每个文档的投票数)

  4. 这是目前使用的弹性搜索请求的主体:

    body = {
            "query": {
                "function_score": {
                    "query": {
                        {'match': {'text': query}}
                    },
                    "functions": [
                        {
                            "field_value_factor": {
                                "field": "ducoumnet_popularity",
                            }
                        }
                    ],
                }
            }
        }
    

    问题是此请求不满足第一优先级。例如,可能存在文档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
                            }
                        }
                    ],
                }
            }
        }
    

1 个答案:

答案 0 :(得分:0)

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

{
    "query": {
        "match": {
            "content": {
                "query": "quick brown dog",
                "minimum_should_match": 75%
            }
        }
    }
}

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