私はPHPで作成した検索を最適化する問題を抱えています。この検索は一度の使用であり、柔軟性はそれほど重要ではありません。複数の文書間で文の検索を最適化する
ように私は、文章の配列を持っている:配列を約1kの文章が含まれてい
$arr = [
'potato',
'hi my name is Ivan'
..
];
。
私は200 GBのファイルを持つハードディスクを持っています。
すべてのファイルを検索し、これらの文のいずれかがファイル内にあるかどうかを確認する必要があります。その場合は、パス、チェックサムなどを特定の形式で出力する必要があります。
非効率的なようである、このような何かをやったときに私が直面しています問題は、検索時間です:
$objections = [];
foreach ($files as $file) {
if (!in_array($file->getExtension(), $allowedExt))
continue;
$txt = file_get_contents($file);
foreach ($words as $word) {
if (stripos($txt, $word) !== false ||
stripos($file->getFilename(), $word) !== false
) {
$file->c_md5 = getCMD5($file);
$objections[] = $file;
}
}
}
検索、それが自己+年齢1hのを取っている、と私は最新のi7のと新しいMacBookの午前。 PHPメモリなどを最大限に活用。
単語の配列にどの単語がマッチするかは関係ありません。そのため、ファイルループ内の単語をループする代わりに、検索を行うもっと巧妙な方法があるのだろうかと思いました。 ORを使った非常に長いREGEX文字列が高速になりますか?
また、いくつかの第3の方法がありますが、これはかなり高速です。
私はドン」大きな正規表現が速くなるかどうかを知ることはできますが、あなたはそれを試してベンチマークしてみてください。その量のデータでは、おそらく非常に遅くなるでしょう。 –