【问题标题】:Elastic search Query terms and scoring弹性搜索查询词和评分
【发布时间】:2013-02-27 11:23:03
【问题描述】:

我有一个使用如下术语的请求:

{
"query": {
  "bool": {
    "should": [
      {
        "terms": {
          "subjects.id": [
            1,
            2,
            3
          ], boost: 3
        }
      },
      {
        "terms": {
          "qualification_type.id": [
            3,
            5
          ], boost: 2
        }
      }
    ]
  }
}

我工作得很好,但是匹配三个主题的文档比只匹配一个主题的文档得分更高。

我的问题是:如果有一个或多个主题匹配,有没有办法强制分数相同?

提前致谢!

【问题讨论】:

标签: elasticsearch tire


【解决方案1】:

您可以将术语查询转换为过滤器并将它们包装到constant score query。例如:

{
    "query": {
        "bool": {
            "should": [{
                "constant_score": {
                    "filter": {
                        "terms": {
                            "subjects.id": [1, 2, 3]
                        }
                    },
                    boost: 3
                }
            }, {
                "constant_score": {
                    "filter": {
                        "terms": {
                            "qualification_type.id": [3, 5]
                        }
                    },
                    boost: 2
                }
            }]
        }
    }
}

【讨论】:

  • 是的,我想了想,也试过了。但是我不能设置两个不同的提升对吗?我编辑了示例以尝试更明确地说明它。
  • 您可以将每个术语过滤器包装到其自己的 constant_score 查询中。我添加了一个示例。
  • 嘿,非常感谢,帮了大忙!我试图通过做类似的事情来玩 custom_score,但从来没有想过。也许你能指出我可以找到一些这样的例子的文档吗?我搜索了很多,没有找到附近的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 2014-11-09
相关资源
最近更新 更多