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

Elasticsearch范围查询和范围筛选器之间的差异

魏学智
2023-03-14

我想查询日期范围内的elasticsearch文档。我现在有两个选择,都很适合我。我已经测试了他们两个。1.范围查询2。距离滤波器

因为我现在有一个小数据集,所以无法测试它们的性能。这两者有什么区别?哪一种方法可以更快地检索文档和响应?

共有2个答案

逑景铄
2023-03-14

过滤器是缓存的,所以它们更快!

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/filter-caching.html

祁烨
2023-03-14

查询和过滤器之间的主要区别在于评分。查询返回每个文档的相对排名分数的文档。过滤器不起作用。由于两个原因,这种差异使得过滤器速度更快。首先,它不需要计算每个文档的分数。第二,它可以缓存结果,因为它不必处理分数每时每刻可能发生的变化——它只是一个布尔值,文档是否匹配?

文件中:

过滤器通常比查询快,因为:

他们不必计算每个文档的相关性得分 —  答案只是一个布尔值“是,文档与筛选器匹配”或“否,文档与筛选器不匹配”。大多数过滤器的结果都可以缓存在内存中,从而加快后续执行。

实际上,问题是你是否以任何方式使用相关性得分?如果不是的话,过滤器就是最好的选择。如果您这样做了,过滤器可能仍然有用,但应该在有意义的地方使用。例如,如果您的文档中有一个语言字段(例如language:“EN”),并且希望按语言和相关性分数进行查询,那么您可以将文本搜索的查询与语言过滤器相结合。过滤器将缓存所有英文文档的文档ID,然后将查询应用于该子集。

我有点过于简化了,但这是最基本的。以下是阅读这篇文章的好地方:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/query-dsl-filtered-query.html

http://exploringelasticsearch.com/searching_data.html

http://elasticsearch-users.115913.n3.nabble.com/Filters-vs-Queries-td3219558.html

 类似资料:
  • 问题内容: 我想查询日期范围内的elasticsearch文档。我现在有两个选择,两个都适合我。已经测试了他们两个。1.范围查询2.范围过滤器 由于我现在的数据集很小,因此无法测试它们的性能。两者有什么区别?哪个会导致更快地检索文档和更快地响应? 问题答案: 查询和过滤器之间的主要区别在于评分。查询将返回每个文档具有相对排名得分的文档。过滤器没有。这种差异使过滤器更快,有两个原因。首先,它不会产生

  • 我试图构造一个ElasticSearch查询,但没有得到预期的结果。任何帮助都将不胜感激! 映射详细信息: null null 目前,每个嵌套的轮班文档都包含一个嵌套的calendarBlock文档,其中包含开始和结束日期时间字段,以及一个可以注册该轮班的最大志愿者人数字段。 查询 我试图构造的查询是经过筛选的查询。从Web上的窗体传入查询字符串。然后,我需要以编程方式将至少三个筛选器附加到这个查

  • 所有人。这是一个带有elasitcsearch文档url的简单测试代码

  • 鉴于这些文件: 如何才能用它们的最小总价值来过滤它们的价格范围? 现在我的查询如下所示: 所以它从逻辑上返回文档1和2,因为它们的价格都在这个范围内,但我只想得到文档2,因为我希望过滤器逻辑只应用于最低价格。

  • 我正在努力为弹性搜索制定正确的API搜索调用,这将要求在过去1小时内获得我想要的ipv4address。 第一次尝试: {“error”:{“root\u cause”:[{“type”:“parsing\u exception”,“reason”:“未知键,用于[范围]中的START\u对象。”,“line”:10,“col”:12}],“type”:“parsing\u exception”,

  • 可以对模型的查询和写入操作进行封装,例如: <?php namespace app\index\model; use think\Model; class User extends Model { public function scopeThinkphp($query) { $query->where('name','thinkphp')->field('i