在迅搜的使用过程中,创建索引会越来越慢或是在平滑重建索引的时候会出现慢的情况,这是由于创建索引时引用limit分段加载数据了,这其实也没有什么问题,但语句中 limit 10000,20将扫描到的10020行,扔掉了前面的1万行,仅返回了20行,导致大数据下迅搜xunsearch创建索引的速度很慢。
解决办法:
当遇到大数据时,暂停迅搜创建索引,先缓存起来,然后慢慢的加入到xunsearch数据中,好了看下边的办法。
一、进入到迅搜的安装路径
比如我这里xunsearch目录是
/www/server/xsearch/sdk/php/util
-
进入后打开XSDataSource.class.php文件,增加全局变量:$previd
protected $inCli; private $dataList, $dataPos;//在这条语句后边加 protected $previd = 0;
然后再修改getData方法,把ID赋值给刚刚增加的$previd
final public function getData() { if ($this->dataPos === null || $this->dataPos === count($this->dataList)) { $this->dataPos = 0; $this->dataList = $this->getDataList(); if (!is_array($this->dataList) || count($this->dataList) === 0) { $this->deinit(); $this->dataList = $this->dataPos = null; return false; } } $data = $this->dataList[$this->dataPos]; $this->dataPos++; $this->previd = $data["id"];//这个位置,增加这一条就可以 return $data; }
一、进入到迅搜的安装路径
修改getDataList,改成如下代码
if ($this->limit <= 0) { return false; } //从这里开始增加代码 $wheresql=" where id > ".$this->previd." order by id asc"; if(stripos($this->sql, "where") >0){ $wheresql=" and id > ".$this->previd." order by id asc"; } //增加的代码结束 $sql = $this->sql .$wheresql. ' LIMIT ' . min(self::PLIMIT, $this->limit) . ' OFFSET ' . $this->offset; //构造出来的sql语句:select id,title,content from article where id>100000 order by id asc limit 1000 offset 0, $this->limit -= self::PLIMIT; //$this->offset += self::PLIMIT;//将这条语句用双斜杠注释掉,offset便不会自增长 return $this->db->query($sql);
好了,到这里就全部操作完成了,可以去创建索引试试有没有效果。
奉承开源精神,本文可随意转载,请注明出处:
一同学习 » 迅搜xunsearch大数据平滑重建索引慢,创建索引越来越慢
网友评论