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

Elastic search限制结果

潘翊歌
2023-03-14
问题内容

在MySQL中,我可以执行以下操作:

  SELECT id FROM table WHERE field = 'foo' LIMIT 5

如果表有10,000行,那么该查询的速度要比我省略LIMIT部分的速度快得多。

在ElasticSearch中,我得到以下内容:

 {
    "query":{
       "fuzzy_like_this_field":{
          "body":{
             "like_text":"REALLY LONG (snip) TEXT HERE",
             "max_query_terms":1,
             "min_similarity":0.95,
             "ignore_tf":true
          }
       }
    }
 }

当我运行此搜索时,它需要花费几秒钟的时间,而mysql可以在短得多的时间内返回相同查询的结果。

如果传入size参数(设置为1),则它仅成功返回1个结果,但是查询本身并没有比将size设置为unlimited并返回所有结果更快。我怀疑查询正在整体运行,并且查询完成处理后仅返回1个结果。这意味着“大小”属性对我而言毫无用处。

有什么方法可以让我的搜索在找到与模糊搜索匹配的单个记录后立即停止搜索,而不是在返回响应之前处理索引中的每个记录?我是否误解了一些更基本的东西?

提前致谢。


问题答案:

您是正确的查询正在完全运行。默认情况下,查询返回按得分排序的数据,因此您的查询将对每个文档进行得分。文档指出,模糊查询无法很好地扩展,因此可能需要考虑其他查询。

一个限制过滤器可能会给你类似的行为你想找的。

限制筛选器限制要执行的文档数量(每个分片)

要复制mysql,请field='foo'尝试使用术语过滤器。当您不关心评分时,应该使用过滤器,因为它们速度更快且可以缓存



 类似资料:
  • 问题内容: 在我的elasticsearch索引“ people”中,包含以下文件: 我想得到一个文档的结果,该文档的分区为2或1,但是最多只能包含2个。因此,如果以上是我的整个索引,我希望它返回: 用Elastic中的单个查询是否可以实现此目标?非常感谢您的帮助! 问题答案: 这样的事情应该做到:

  • 问题内容: elasticsearch新手。编写搜索查询返回我集合中所有匹配的记录时遇到问题。以下是我对搜索记录的查询 通过运行此查询,我最多只能获取10条记录,请确保我的集合中有10条以上匹配的记录。我搜索了很多,最后在查询中得到了大小参数。但就我而言,我不知道记录总数。我认为给size变量一个无限的数字不是一个好习惯,因此如何处理这种情况请帮助我解决此问题,谢谢 问题答案: 显示所有结果不是很

  • 问题内容: 我如何从elasticsearch中获取所有结果,因为结果仅显示限制为10。我有一个查询,像: 我已将限制设置为15,但我不想使其无限,以便我可以获取所有数据,因为我的数据不断变化,并且我想获取所有数据,所以我无法设置限制。 问题答案: 您可以使用和参数浏览所有数据。这可能非常慢,具体取决于您的数据以及索引中有多少。 http://www.elastic.co/guide/zh-CN/

  • 问题内容: 在Google上搜索后,我发现Elasticsearch的最大查询条件限制为1024? 它是可配置的吗?如果可以,请提供任何步骤。 谢谢,Sameer 问题答案: 默认值为1024,但是它是可配置的。在elasticsearch配置文件(例如yml文件)中,设置提及的设置:例如。

  • 问题内容: 如何为特定类型执行ElasticSearch聚合?我意识到您可以在请求网址中指定索引和/或类型,但是我想对两种不同的类型进行汇总。 谢谢! 问题答案: 您可以按类型过滤聚合,然后使用子聚合。例如:

  • 问题内容: 这与多级排序无关。 我需要首先根据距离选择结果,将结果限制为50,然后再按价格将这50结果排序。 本质上,第二种排序放弃了内部排序的顺序-但是内部排序用于磨练前50个结果。 对于此类问题,我看到的其他答案是第二级排序,这不是我想要的。 顺便说一句:我看过聚合-前N个结果,但不确定是否可以对聚合结果排序应用排序。也看过了,但我不知道将“分类”放在哪里 问题答案: 热门匹配汇总可让您根据主