是时候用 ES 拯救发际线啦

es查询为什么指定索引名和type类型检索时间比全文检索耗时还长呢?

Elasticsearch | 作者 jianjianhe | 发布于2018年04月12日 | 阅读数:5389

es版本2.3.5我想测试下深分页的查询性能,首先在head插件上测试,首先没有指定索引和type类型直接进行分页查询,耗时如下:
Snipaste_2018-04-12_14-24-45.png

 
然后,再指定索引名和type类型,再进行分页查询,发现这耗时竟然变长了:

Snipaste_2018-04-12_14-25-17.png

 
我想请教下各位怎么会这样,正常理解不指定索引和type类型是全文检索,而指定了索引名和type类型应该耗时更少才对。
最后一个问题,我通过代码测试深分页的分页数瓶颈,代码如下:
 

Map<Integer,Long> cost =new TreeMap<>();

//Map<Integer,TimeValue> cost =new TreeMap<>();

TransportClient client = getClient();

int[] from = {50000,100000,500000,900000};

for (int i=0;i<from.length;i++){

SearchResponse response = client.prepareSearch("nyc_taxis").setTypes("type")
.setQuery(QueryBuilders.termQuery("mta_tax,",0.5))
.setSearchType(SearchType.QUERY_THEN_FETCH).setFrom(from[i]).setSize(50).execute().actionGet();

long time = response.getTookInMillis();

//TimeValue time = response.getTook();

cost.put(from[i],time);
}

System.out.println(cost);

 
输出:{50000=2, 100000=3, 500000=8, 900000=12}
代码获取的分页时间,怎么跟head插件上的耗时不一样啊,而且时间更短,是不是哪里写错了请教下各位!
已邀请:

jianjianhe

赞同来自:

首先,代码那块,我刚刚写错了,这里自己发现更正一下:
SearchResponse response = client.prepareSearch("nyc_taxis").setTypes("type")
.setQuery(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("mta_tax",0.5)))
.setSearchType(SearchType.QUERY_THEN_FETCH).setFrom(from[i]).setSize(50).execute().actionGet();

jianjianhe

赞同来自:

之前代码是写错了,少了boolquery, 直接termQuery,获取结果是空所以,耗时很短,还有就是上面叙述的指定索引和type类型反而耗时比不指定慢,现在发现主要是由于添加了type,在代码中测试也发现,删掉setTypes("type"),耗时时间

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

这个应该是基本一致的,建议你把DSL打印出来对比下,优先确认下查询的DSL是否完全一致。
从这个角度排查下。
 

要回复问题请先登录注册