我有一個包含文件列表(大約6000個文件)的數據庫。所有這些文件都有一些額外的詳細信息(如項目編號,部門,客戶,評論,學科)。搜索代碼優化 - CakePHP
雖然代碼和搜索起作用,但速度很慢。有兩個條件的簡單搜索大約需要一分鐘才能完成。
我的代碼如下。我想知道的是,我可以做些什麼來簡化和優化我的搜索功能?
public function search() {
$Terms = explode(' ',$this->request->data['KmFiles']['search']);
$possible = 0;
$Matches = array();
foreach($Terms as $Term) {
$Files = $this->KmFile->find('list',
array(
'conditions' => array(
'file_name LIKE' => '%' . $Term . '%'
),
'fields' => array('id')
)
);
$possible++;
$Clients = $this->KmClient->find('list',
array(
'conditions' => array(
'clients LIKE' => '%' . $Term . '%'
),
'fields' => array('km_file_id')
)
);
$possible++;
$Disciplines = $this->KmDiscipline->find('list',
array(
'conditions' => array(
'disciplines LIKE' => '%' . $Term . '%'
),
'fields' => array('km_file_id')
)
);
$possible++;
$Projects = $this->KmProject->find('list',
array(
'conditions' => array(
'projects LIKE' => '%' . $Term . '%'
),
'fields' => array('km_file_id')
)
);
$possible++;
$Sectors = $this->KmSector->find('list',
array(
'conditions' => array(
'sectors LIKE' => '%' . $Term . '%'
),
'fields' => array('km_file_id')
)
);
$possible++;
$Comments = $this->KmComment->find('list',
array(
'conditions' => array(
'comments LIKE' => '%' . $Term . '%'
),
'fields' => array('km_file_id')
)
);
$possible++;
$Matches = array_merge($Matches,$Files,$Clients,$Disciplines,$Projects,$Sectors,$Comments);
}
if(count($Matches) > 0) {
$NumberOfMatches = array_count_values($Matches);
$Matches = array_unique($Matches);
$k=0;
foreach($Matches as $Match) {
$Result = $this->KmFile->find('all',
array(
'conditions' => array(
'id' => $Match
)
)
);
$Results[$k] = $Result[0];
$Results[$k]['Relevance'] = round(($NumberOfMatches[$Match]/$possible) * 100,2);
$relevance[] = $Results[$k]['Relevance'];
$k++;
}
array_multisort($relevance,SORT_DESC,$Results);
$Stats['Count'] = count($Results);
$Stats['Terms'] = $this->request->data['KmFiles']['search'];
$this->set(compact('Results','Stats'));
} else {
$Stats['Count'] = 0;
$Stats['Terms'] = $this->request->data['KmFiles']['search'];
$this->set(compact('Stats'));
}
}
我知道這是一段很長的代碼,但是我對CakePHP相當陌生,所以不知道該怎麼做來改進它。
任何援助將不勝感激。