当在做es查询时,需要通过terms进行查询,terms一次最多可以进行1000个值的查询,如果通过迭代去查询,单线程查询会比较耗时间,因此,采用分批,每一个批次放入一个线程,通过设置固定线程池去进行线程的调用,防止terms太多,分批次多造成线程数过多。经过这样,可以有效的提升查询性能。其他相似场景亦可。
定义线程类:
/**
* @Author: MR LIS
* @Description:terms多线程查询实现
* @Date: Create in 17:05 2018/7/3
* @Modified By:
*/
@Service(value = "multiTermsESQueryThread")
@Scope(value="prototype")
public class MultiTermsESQueryThread implements Callable<List<Map<String, Object>>> {
private List<String> indexs;
private List<String> types;
private String proName;
private List<Object> proValueList;
@Override
public List<Map<String, Object>> call() throws Exception {
TransportClient client = ESUtils.getClient();
SearchReques