弹性搜索限制结果

Jem*_*lus 10 elasticsearch

在MySQL中我可以做类似的事情:

  SELECT id FROM table WHERE field = 'foo' LIMIT 5
Run Code Online (Sandbox Code Playgroud)

如果表有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
          }
       }
    }
 }
Run Code Online (Sandbox Code Playgroud)

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

如果我传入size参数(设置为1),它成功只返回1个结果,但查询本身并不比我将大小设置为无限并返回所有结果更快.我怀疑查询是完整运行的,在查询完成处理后只返回1个结果.这意味着"size"属性对我的目的毫无用处.

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

提前致谢.

And*_*ndy 9

你是完全正确的查询是正确的.默认情况下,查询返回按分数排序的数据,因此您的查询将对每个文档进行评分.文档声明模糊查询不能很好地扩展,因此可能需要考虑其他查询.

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

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

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