当前位置: 首页 > 面试题库 >

Elasticsearch:constant_score查询与bool.filter查询

益源
2023-03-14
问题内容

我正在尝试使用Elasticsearch获得完全匹配的结果(所以我不在乎在这里得分)

我看到有两种方法可以做到这一点:

{
    "query" : {
        "constant_score" : {
            "filter" : {
                "term" : {
                    "exact_match_field" : "hello world !"
                }
            }
        }
    }
}

要么

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "exact_match_field": "hello world !"
        }
      }
    }
  }
}

两者都能工作,并给我想要的结果。它们之间有什么区别?使用一个与另一个相比有性能优势吗?

(我正在使用Elasticsearch V 5.6)

谢谢 !


问题答案:

恒定分数查询可为任何匹配的文档提供相等的分数,而与诸如TF, IDF等等的任何评分因素无关。当您不关心文档是否匹配多少而只是文档是否匹配并且也给出分数时,可以使用此分数过滤。

constant_score查询采用boost参数,该参数设置为与其他查询组合时每个返回文档的分数。默认情况下,boost设置为1。

如果您对下面的链接感兴趣,将为您提供更多见解

https://www.compose.com/articles/elasticsearch-query-time-strategies-and-
techniques-for-relevance-part-
ii/



 类似资料:
  • 问题内容: JOIN查询比几个查询快吗?(您运行主查询,然后根据主查询的结果运行许多其他的SELECT) 我问是因为加入它们会使我的应用程序设计复杂化 如果速度更快,谁能大致估算出多少?如果是1.5倍,我不在乎,但是如果是10倍,我想我是。 问题答案: 这太模糊了,无法为您提供与您的具体情况相关的答案。这取决于很多事情。Jeff Atwood(该网站的创始人)实际上撰写了有关此内容的文章。但是,在

  • Sequelize中有两种查询:使用Model(模型)中的方法查询和使用sequelize.query()进行基于SQL语句的原始查询。 Model查询 1.1 Attributes - 属性与查询字段 1.2 Where - 指定筛选条件 1.3 limit/offset - 分页与限制返回结果数 1.4 查询排序 原始查询 2.1 原始查询方法 2.2 查询参数替换 2.3 参数绑定 1. M

  • 问题内容: 谁能看到以下查询出了什么问题? 当我运行它时,我得到: #1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第8行的’a where a.CompetitionID = Competition.CompetitionID’附近使用 问题答案: 主要问题是内部查询不能与外部语句上的子句相关,因为在内部子查询执行之前,where过滤器首先应用于要

  • 问题内容: 我很好奇为何应该比更快地执行。 当比尔·卡尔文提出一个要点时,我正在回答一个问题。当您使用它时,它使用相关子查询(依赖子查询),而IN()仅使用子查询。 解释显示,并且两者都使用了一个依赖子查询,并且都只使用了一个子查询..所以我很好奇关联子查询如何比子查询更快? 我以前使用过EXISTS,它的执行速度比IN快,这就是我感到困惑的原因。 这是带有说明的SQLFIDDLE 一些问题 在上

  • 问题内容: 我是一个老派的MySQL用户,并且始终喜欢子查询。但是如今,每个人都使用子查询,而我讨厌它。我不知道为什么 我缺乏理论知识来自行判断是否存在差异。子查询是否与a一样好,因此不必担心吗? 问题答案: 取自MySQL手册 (13.2.10.11将子查询重写为Joins): LEFT [OUTER] JOIN可以比同等子查询更快,因为服务器可能可以更好地对其进行优化-这不仅限于MySQL S

  • 问题内容: 我重构了从另一家公司继承来的应用程序的慢速部分,以使用内部联接而不是子查询,例如: 重构查询的运行速度大约快100倍。 (约50秒,约0.3秒)我期望有所改善,但是谁能解释为什么如此剧烈?where子句中使用的列均已建立索引。SQL是否在where子句中每行执行一次查询? 更新 -说明结果: 区别在于查询“(id)in()”的第二部分- vs 1带有连接的索引行: 问题答案: “相关子