ES中存储的数据量为100万条,当根据条件查询ES中符合条件的所有数据时,ES查询速率很慢,需要一分多钟。那么请问在这种情况下,怎样才能提高ES的查询效率呢?
Elasticsearch | 作者 jnliao | 发布于2017年08月26日 | 阅读数:22048
根据条件查询es中符合条件的所有数据的java核心代码如下所示:
List<Customer> customers = new ArrayList<>();
SearchResponse response = client.prepareSearch(customerIndex)
.setTypes(customerType)
.setScroll(TimeValue.timeValueMinutes(1))
.setQuery(boolQueryBuilder)
.setSize(10000)
.get();
do {
customers = getCustomers(customers,response);
response = client.prepareSearchScroll(response.getScrollId()).setScroll(TimeValue.timeValueMinutes(1)).execute().actionGet();
} while(response.getHits().getHits().length != 0);
6 个回复
kennywu76 - Wood
赞同来自: laoyang360 、jnliao 、More_lingyang
看起来这段代码是通过scoll查询将满足条件的几十万条数据,1万条一个批次分批取回。 while循环里,想通过下面这个方法:
将response里解析出来的结果放到customers这个list里面。
这个赋值是做了对象的拷贝,意味着每次迭代,就拷贝一个更大的list,越来越慢。 正确的做法是每次迭代解析出response里的结果后,直接add到customers列表。
jnliao
赞同来自:
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自:
这里需要优化下
freeboy
赞同来自:
Cheetah
赞同来自:
novia - 1&0
赞同来自: