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

Elasticsearch过滤查询与过滤器

有睿
2023-03-14
问题内容

“过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如

情况1:

{
  "query":{
    "filtered":{
      "query":{
        "term":{"title":"kitchen3"}
      },
      "filter":{
        "term":{"price":1000}
      }
    }
  }
}

情况2:

{
  "query":{
    "term":{"title":"kitchen3"}
  },
  "filter":{
    "term":{"price":1000}
  }
}

我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using-
filter-outside-td3960119.html中
找到了此讨论,但所引用的URL是404,并且解释过于简洁我。

请示教或提供指出这些区别的任何文件,谢谢。


问题答案:

差异与性能有关。查询 始终执行顶层的“过滤器” 。这意味着对所有文档执行查询,为所有文档计算分数,等等。-只有不匹配过滤器的文档才会被排除。

使用“过滤的”查询,ES可能会优化此计算,例如,首先执行过滤器,然后对有限的一组文档执行查询,从而节省了测试与查询不匹配过滤器的文档的时间,以及如果他们确实符合查询条件,则为他们计算分数。

如果使用同一过滤器执行多个查询,则还有更多优点:可以缓存过滤器,从而进一步提高每个查询的性能。这适用于您的示例:默认情况下会缓存“术语”过滤器。

您还可以显式控制“已过滤”查询的执行(请参阅文档),以针对特定用例进行优化。



 类似资料:
  • 问题内容: 我什么时候应该使用查询或过滤器或两者的某种组合都看不到任何描述。它们之间有什么区别?谁能解释一下? 问题答案: 区别很简单:过滤器被缓存并且不影响得分,因此比查询要快。也在这里看看。假设查询通常是用户输入的内容,并且几乎是不可预测的,而过滤器则可以帮助用户缩小搜索结果的范围,例如使用构面。

  • 我在ES中有两个问题。对于同一组文档,两者的周转时间都不同。两者在概念上都在做同样的事情。我没有什么疑问 1-这两者之间有什么区别?2-哪个更好使用?3-如果两者相同,为什么表现不同? 映射: 更新1: 我在同一组数据上尝试了bool/必须查询和bool/过滤器查询,但我发现了奇怪的行为 1-bool/必须查询能够搜索所需的文档 2-虽然bool/filter无法搜索文档。如果我删除第二个字段条件

  • 我阅读了一些关于查询上下文和过滤上下文的文章和文档,了解到如果你不需要进行全文搜索或评分,最好使用过滤上下文。就我而言,我想返回包含ID的日志……所以我意识到我应该只使用过滤上下文而不是查询上下文。除了全文搜索或评分之外,是否有一条硬基线来定义何时应该使用其中一个? 所以我从我最初的DSL查询搜索cmd: 到过滤器上下文: 因为,我想使用NEST来执行我采用这种方法的查询搜索。 这是使用NEST进

  • 问题内容: 我有一个带有许多字段的表。我正在尝试在asp.net中创建搜索过滤器,以便用户可以按一个或多个字段进行搜索。所以基本上我想创建一个包含4个参数的存储过程,如果它不为null,它将把参数附加到WHERE子句中。 TableExample有4列,Col1 Col2 Col3 Col4 我希望有一种方法可以用一个存储过程完成此操作,而不必为每种可能的组合创建一个。 我正在尝试类似的方法,虽然

  • 我试图编写一个由2个部分组成的弹性搜索布尔查询。我想要“必须”的两个条件和“应该”的两个条件。问题是我只想得到“应该”的分数。我尝试了“过滤器”,但没有成功。 你有什么想法吗?

  • 我从事elasticsearch,我尝试混合两个工作查询。第一个是“and filter”,第二个是“bool filter”,但我失败了。 我的查询是从用户交互界面动态生成的。 “和过滤器”: 我需要“和过滤器”来查询数据,例如,字段必须等于“非洲”或“亚洲”或为空。这是一个工作查询的示例: 此查询工作正常,结果如下: 现在我需要用字段“D\u TYPESTATUS”来限制结果数据,该字段必须与