首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从elastic中只得到x个结果,然后停止搜索?

问如何从elastic中只得到x个结果,然后停止搜索?
EN

Stack Overflow用户
提问于 2016-09-19 22:48:54
回答 2查看 199关注 0票数 0

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

代码语言:javascript
复制
{
  "query": {
      "term": {
         "SOME_FIELD": "SOME_TERM"
       }
  },
 "size": 10
}

适用于ca 5M文档。"Some_field“是索引的,而不是分析的。查询平均需要ca 1秒hetzner。太慢:)我不关心分页、排序或评分。我只想要10个第一个“随机”匹配的文档。

有没有办法在"mysql方式“中使用禁用分数?

筛选器或constant_score没有帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-20 14:53:32

我要找的选项是"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

因此,我的查询如下所示:

代码语言:javascript
复制
{
"query": {
  "term": {
     "SOME_FIELD": "SOME_TERM"
   }
},
"size": 10,
"terminate_after": 10
}

不要用10代替10,弹性不会将其转换为整型,也会忽略参数

票数 0
EN

Stack Overflow用户

发布于 2016-09-20 00:11:46

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

代码语言:javascript
复制
{
  "query": {
     "bool": {
        "filter": {
           "term": {
             "SOME_FIELD": "SOME_TERM"
           }
        }
      }   
  }
 "size": 10
}

如果仍然太慢,您可以考虑使用document routing,但这对您来说可能不是一个可行的选择,因为您可能只有1个分片或很少的SOME_FIELD术语。

我还建议你重温一下Elastic的production deployment文档,它概述了如何优化配置你的集群,如果你当前有一个错误配置的集群,也可以产生一些严重的性能提升,例如,在强大的机器上运行,但保持默认的ES_HEAP_SIZE值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39576067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档