接手搜索引擎后,最近调优系统发现一个方法执行特别慢。仔细梳理后发现,这方法从MongoDB索引全量数据到Elasticsearch,而实际上,接口使用根本用不到全量数据,能用到1W就算是极限了。
最关键的是,分页多次索引,一次处理10条数据……简直ZZ……

调整了下方案,只索引点击数降序排序后的前2W的数据,并且分页单次索引量从10改为1000。

问题由此而来,降序怎么整?看了下前人的MongoDB的驱动写的……那自然是没有留下排序的功能……于是尝试改造其selectAll的接口。

顺手尝试用sort,报方法不存在,跟进源码,结合谷歌搜索的结果,匹配源码中的发现,使用方法addOrderBy即可。

示例:

->addOrderBy(['_cnt'=> SORT_DESC])

通过阅读源码你会发现,面向对象的一个好处,所有类似数据库的接口是都支持addOrderBy的。其他的接口可以参考:

vendor\yiisoft\yii2\db\QueryInterface.php

相关参考:https://stackoverflow.com/questions/31864128/sorting-inside-a-document-in-yii2-mongodb

Related Posts: Yii2 MongoDB query sort方式 :

avatar