【问题标题】:Elastic Search limit results弹性搜索限制结果
【发布时间】:2012-01-24 21:11:02
【问题描述】:

在 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 设置为无限制并返回所有结果快。我怀疑查询正在完整运行,并且在查询完成处理后只返回 1 个结果。这意味着“size”属性对我来说是无用的。

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

提前致谢。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

    limit filter 可能会为您提供与您所寻找的类似的行为。

    限制过滤器限制要执行的文档数量(每个分片) 开

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2016-10-02
      相关资源
      最近更新 更多