Ich habe Probleme bei der Optimierung einer Suche, die ich in PHP erstellt habe, diese Suche wird nur einmal verwendet, daher ist Flexibilität nicht so wichtig.Optimieren einer Satzsuche über mehrere Dokumente
Ich habe eine Reihe von Sätzen, wie:
$arr = [
'potato',
'hi my name is Ivan'
..
];
Das Array etwa 1k Sätze enthält.
Und ich habe eine Festplatte mit 200 GB Dateien.
Ich muss alle Dateien durchsuchen und sehen, ob einige dieser Sätze in den Dateien sind, und wenn ja, den Pfad, eine Prüfsumme usw. in einem bestimmten Format auszudrucken.
Die Frage, die ich bin vor ist die Suchzeit, wenn so etwas wie dies zu tun, was ineffizient scheint: Selbst
$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;
}
}
}
Die Suche ist im Alter von 1 h +, und ich bin an einem neuen MacBook mit dem neuesten i7 unter . Mit PHP Speicher usw. maxed.
Es ist nicht relevant, welches Wort in der Wortgruppe übereinstimmt, also habe ich mich gefragt, ob es eine cleverere Möglichkeit gibt, die Suche durchzuführen, als die Wörter innerhalb der Dateischleife zu durchlaufen. Wäre ein sehr langer REGEX-String mit ODERs schneller?
Oder gibt es einen dritten Weg, der sehr schnell ist.
I don‘ Ich weiß nicht, ob ein großer Regex schneller wäre, aber wenn du eine Idee hast, wie man einen solchen (was du scheinst) zu machen, versuche es einfach und benchmark. Bei dieser Datenmenge wird es wahrscheinlich sehr langsam sein. –