如何只获得弹性的x结果,然后停止搜索?

时间:2016-09-19 14:48:54

标签: elasticsearch

我的整个索引大约是700M文档,这个查询:

{
  "query": {
      "term": {
         "SOME_FIELD": "SOME_TERM"
       }
  },
 "size": 10
}

适用于ca 5M docs。 " Some_field"被索引,未分析。 查询平均需要大约1s hetzner。太慢:)我不关心分页或排序或得分。我只想先10"随机"匹配文档。

有没有办法用残疾分数,用#34; mysql方式"?

filter或constant_score没有帮助

2 个答案:

答案 0 :(得分:0)

如果你使用过滤器,那将删除分数计算并提供更快的查询速度:

{
  "query": {
     "bool": {
        "filter": {
           "term": {
             "SOME_FIELD": "SOME_TERM"
           }
        }
      }   
  }
 "size": 10
}

如果这仍然太慢,您可以考虑使用document routing,但它可能不适合您,因为SOME_FIELD可能只有1个分片或很少的术语。

我还建议您阅读Elastic的production deployment文档,它概述了如何以最佳方式配置群集,并且在您当前拥有错误配置的群集(即运行)时也可以产生一些严重的性能提升在一台强大的机器上,但保持默认的ES_HEAP_SIZE值。

答案 1 :(得分:0)

我正在寻找的选项是" terminate_after"。不幸的是,它不是很好"记录,见:

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-limit-query.html

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-count.html#_request_parameters

所以,我的查询如下:

{
"query": {
  "term": {
     "SOME_FIELD": "SOME_TERM"
   }
},
"size": 10,
"terminate_after": 10
}

不要使用" 10"而不是10.弹性不会将其强制转换为整数并忽略参数