我遇到了优化我在PHP中创建的搜索的问题,此搜索是一次性使用,因此灵活性并不重要。优化跨多个文档的句子搜索
我有一个阵列的句子,如:
$arr = [
'potato',
'hi my name is Ivan'
..
];
数组包含1K左右的句子。
而我有一个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 +,我上了一个新的MacBook采用最新酷睿i7 。随着PHP内存等最大。
这是不相关的单词数组匹配,所以我想知道是否有一些更聪明的方式来执行搜索,而不是循环文件循环内的单词。 OR的长REGEX字符串会更快吗?
还是有第三种方式,它是很快。
我不不知道一个大的正则表达式是否会更快,但是如果你对如何做一个(你似乎)有一个想法,只需尝试一下并进行基准测试。有了这些数据,它可能会非常慢,无论如何。 –