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

查询与过滤器-执行顺序

阎京
2023-03-14
问题内容

我已经读过这个问题,我的一个同事让我感到怀疑:

在过滤查询中,何时应用过滤器?在执行查询之前还是之后?什么时候缓存结果?

如果事先应用了过滤器,那么在过滤器中复制查询部分不是一件好事吗?如果之后应用了筛选器,那么我将无法理解缓存的内容。


问题答案:

幸运的是,ES为您提供了两种类型的过滤器供您使用:

{
  "query" : {
    "field" : { "title" : "Catch-22" }
  },
  "filter" : {
    "term" : { "year" : 1961 }
  }
}


{
  "query": {
    "filtered" : {
      "query" : {
        "field" : { "title" : "Catch-22" }
      },
      "filter" : {
        "term" : { "year" : 1961 }
      }
    }
  }
}

在第一种情况下,过滤器将应用于查询找到的所有文档。在第二种情况下,将在查询运行之前过滤文档。这样可以产生更好的性能。

引用自:http : //www.packtpub.com/elasticsearch-server-for-
fast-scalable-flexible-search-
solution/book

关于缓存,我不确定过滤器的缓存机制。我的猜测是:第一种情况,由于过滤器是针对查询返回的一组结果,因此缓存是特定于此返回集的。第二种情况是,首先应用过滤器,然后为您检查的索引存储高速缓存,因此,此高速缓存更可重用,因为它不依赖查询的内容,但是第一次需要较大的内存开销和查询时间(在生成缓存之前)。



 类似资料:
  • 不论是客户端,还是服务器,都可以添加多个过滤器。假设我们按照添加的顺序把它们叫做 filter1, filter2, … filterN。那幺它们的执行顺序是这样的。 在客户端的执行顺序 +------------------- OutputFilter -------------------+ | +-------+ +-------+ +-------

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

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 我在我的网络应用程序中偶然发现了一个错误,在我发现发生了什么之前,这个错误让我抓耳挠腮(最终扯了扯头发)。 基本上,我在我的网站上定义了两个过滤器。xml和两个类似的映射: 它们都是Spring MVC过滤器。我的问题是,我得到的表单数据没有被解释为UTF-8,尽管事实上编码过滤器应该在其他任何东西有机会从中读取之前将请求编码设置为UTF-8。 我最后注意到,表单方法过滤器在编码过滤器之前执行,尽

  • 问题内容: 我正在尝试获取IP范围查询以处理一组文档,但是没有任何结果。 映射(我已经尝试了和): 数据看起来像这样(许多实例的值都不同) 现在,我去看了官方的ES文档,但是没有IP范围示例,但是我在Git上找到了一个不起作用的示例。它看起来如下: 当我用手指指住字段和地址时,上面的方法引发了一些令人鼓舞的解析错误,但最终没有返回结果。 我还尝试了标准范围语法: 这也没有返回结果。如何查询一系列I

  • 问题内容: 我希望能够列出用户已添加的项目(他们被列为创建者)或已被批准的项目。 所以我基本上需要选择: 我将如何在Django中执行此操作?(最好使用过滤器或查询集)。 问题答案: 有些对象允许进行复杂的查找。例: