当前位置: 首页 > 知识库问答 >
问题:

elasticsearch函数得分,“查询中匹配项数”的增强权重(协调)

汪永春
2023-03-14

我想使用elasticsearch功能得分自定义评分,这些是我的排名优先事项:

>

  • 与查询的共同术语数(例如,一个文档在查询中有4个术语中的3个,无论每个术语的TF/IDF得分有多大,它的排名都应该高于一个文档在查询中有4个术语中的2个)。在弹性文献中,它被称为协调因子。

    术语相关性之和。(过渡联邦/以色列国防军)

    文档受欢迎程度(每个文档的票数,如《受欢迎程度提升》中所述)

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

    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个答案

    祁增
    2023-03-14

    我没有找到这个问题的确切答案,但它可能会帮助人们知道您可以使用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-minimal-show-match.html

     类似资料:
    • 这是一个关于2个查询的故事。一个返回结果,而另一个不返回结果。为什么? 返回结果的查询:

    • 问题内容: 我想获取与“ statusCode”不匹配的结果:200 为了匹配字段中的文本,您可以使用 我尝试过这样的事情: 根据:https : //www.elastic.co/guide/zh- CN/elasticsearch/reference/current/query-dsl-bool- query.html 问题答案: 试试这个

    • 问题内容: 我正在用查询查询我的elasticsearch索引。查询本身的结构与此类似 我希望能够确定所有这些查询中哪一个是与结果匹配的查询。是否有内置的elasticsearch方法允许这样做,还是我必须手动进行? 问题答案: 您可以使用命名查询,然后在结果中获得匹配的查询的名称。 然后,在结果中,您将获得一个数组,其中包含与文档匹配的查询的名称。

    • 假设我的索引有两个文档: “Foo Bar” “Bar Foo” 当我对“bar foo”进行常规匹配查询时,两个文档都正确匹配,但它们获得了相等的相关性分数。然而,我希望单词的顺序在评分时是有意义的。换句话说,我希望“Bar Foo”有更高的分数。 因此,我尝试将match查询放在bool查询的must子句中,并包含一个match_prach(具有相同的查询字符串)作为shoul子句。在我使用“

    • 问题内容: 我目前正在做一个包含多重匹配和功能得分的查询。JSON的重要部分如下所示: 但是,我也想包括不一定与查询匹配但具有大于0的特定数值的结果。我认为布尔查询可以做到这一点,但是我不知道如何将布尔查询与功能分数查询。 我知道多重匹配查询只是布尔查询的简写,我可以将多重匹配查询扩展到其布尔匹配部分,但是,我不知道如何在其中进行功能评分。 有任何想法吗?顺便说一下,我的版本是1.1.0。 问题答

    • 我从这里学了一个例子 索引的映射为 索引的文档是 在对“full_text”字段使用简单的匹配查询时,我注意到如下所示 我看到文件是匹配的。另外,如果我使用大写字母,也就是“quick”作为搜索词,它显示文档是匹配的。 为什么会这样?。默认情况下,标记器会将“full_text”字段中的文本拆分为“quick”、“foxes”。那么,匹配查询如何与文档匹配大小写值呢?