我遇到了優化我在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字符串會更快嗎?
還是有第三種方式,它是很快。
我不不知道一個大的正則表達式是否會更快,但是如果你對如何做一個(你似乎)有一個想法,只需嘗試一下並進行基準測試。有了這些數據,它可能會非常慢,無論如何。 –