我的整个索引大约是700M个文档,查询如下:
{
"query": {
"term": {
"SOME_FIELD": "SOME_TERM"
}
},
"size": 10
}适用于ca 5M文档。"Some_field“是索引的,而不是分析的。查询平均需要ca 1秒hetzner。太慢:)我不关心分页、排序或评分。我只想要10个第一个“随机”匹配的文档。
有没有办法在"mysql方式“中使用禁用分数?
筛选器或constant_score没有帮助
发布于 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
因此,我的查询如下所示:
{
"query": {
"term": {
"SOME_FIELD": "SOME_TERM"
}
},
"size": 10,
"terminate_after": 10
}不要用10代替10,弹性不会将其转换为整型,也会忽略参数
发布于 2016-09-20 00:11:46
如果你使用过滤器,这将删除分数计算,并应提供更快的查询速度:
{
"query": {
"bool": {
"filter": {
"term": {
"SOME_FIELD": "SOME_TERM"
}
}
}
}
"size": 10
}如果仍然太慢,您可以考虑使用document routing,但这对您来说可能不是一个可行的选择,因为您可能只有1个分片或很少的SOME_FIELD术语。
我还建议你重温一下Elastic的production deployment文档,它概述了如何优化配置你的集群,如果你当前有一个错误配置的集群,也可以产生一些严重的性能提升,例如,在强大的机器上运行,但保持默认的ES_HEAP_SIZE值。
https://stackoverflow.com/questions/39576067
复制相似问题