假设一次查询某表,query的时候term里有两个主要字段,rule_minor_type和rule_major_type,这两个字段取值不同,表示不同类型的数据,例如,我们取一组值,叫做风险数据,风险数据相对于原表来说,数据量要小很多(原表可能是1一条数据,而风险数据只有1百万条)。
我们想要验证,提前将这部分风险数据分到单独的表,能否加快查询速度,如果可以,可以加快多少?
要做上面的验证,主要使用的API是reindex API,API用法请参考官网,你可以用curl来发送RESTFul API请求,但是命令行操作起来不太方便,我们之前介绍过Elasticsearch plugin cerebro的安装,今天我们用cerebro来发送API请求,因为我的Elasticsearch是配置在其他机器的,之前也没有开远程访问和cors支持,需要按照上面文章所说,开启cors支持,然后浏览cerebro所在主机的9000端口,输入Elasticsearch服务器的访问地址,打开REST窗口即可使用:
原查询
原来查询7天数据,条件如下:
返回结果为:
这个耗时并不准确,因为有Cache。
我们先看看,这几张表的总数据量是多少:
返回结果为:
好了,原本是,6亿条(608212533)总数据,风险数据为280万条(2826534)。
重建索引
重建索引的时候,我们一个索引一个索引的来,可以先看看,某个索引下的风险数据有多少条:
返回结果为:
可以看出,这个一个索引下的风险数据为38万条(381551),有了这个数据,重建索引完成后,可以对照一下,是否条数一至,以检测索引创建是否正确。
调用reindex之前,我们可以先创建索引,并设置索引的参数,例如:
因为之前注册过test-*的模板,此时创建一个新index,自动会根据index名称,匹配上模板。当然,如果没有修改设置的需求,这个步骤可以不用,直接针对原索引做filter重建:
|
|
返回结果为:
如此重复,将不同日期的索引全部 reindex:
新查询
从新创建的风险表查询数据:
返回结果为:
结论
如果磁盘数据读取量不大,查询结果差异不大,反之,由于首次查询需要载入打量磁盘数据,所以首次查询差异明显: