Търсачка във файлове

C++ JAVA
User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3302
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Търсачка във файлове

Post by dakata__92 » Fri May 08, 2020 9:45 am

Здравейте,
Преди време разписах една опростена търсачка във файлове. Файловете са много и няма възможност да се прехвърлят в база данни.
Как мога да ускоря търсенето в тях? Говоря за около 200 000 файла с по над 300 000 записа.

Code: Select all

<?php
$filePath = 'test.txt';
$string = '';
$returnArray = [];
$file = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($file as $k => $row) {
	if (stripos($row, $string) !== false) {
		$returnArray[$k] = $row;
	}
}

Впрочем това е най-базистният вариант на търсачката. Идеята е да ми връща всички съвпадащи със стринга резултати. Чудех се за някакво подобрение със shell или нещо от сорта, но реших първо да се консултирам с вас.

User avatar
Ticketa
Турист
Турист
Posts: 521
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 23
Location: in /root
Contact:

Re: Търсачка във файлове

Post by Ticketa » Fri May 08, 2020 12:23 pm

find ./direktoria -type f -exec grep -H 'tursenata dums' {} \;

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3302
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Re: Търсачка във файлове

Post by dakata__92 » Fri May 08, 2020 12:32 pm

Ticketa wrote:
Fri May 08, 2020 12:23 pm
find ./direktoria -type f -exec grep -H 'tursenata dums' {} \;
За Windows ми е необходим.

User avatar
Ticketa
Турист
Турист
Posts: 521
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 23
Location: in /root
Contact:

Re: Търсачка във файлове

Post by Ticketa » Fri May 08, 2020 12:36 pm

findstr /I DUMA *

Символа * означава всички файлове в директорията.

Ако искаш в конкретна папка и конкретно разширение на файл ползвай

findstr /I ДУМА E:\direcotory\*.txt

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3302
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Re: Търсачка във файлове

Post by dakata__92 » Fri May 08, 2020 1:09 pm

Ticketa wrote:
Fri May 08, 2020 12:36 pm
findstr /I DUMA *

Символа * означава всички файлове в директорията.

Ако искаш в конкретна папка и конкретно разширение на файл ползвай

findstr /I ДУМА E:\direcotory\*.txt
findstr /I Тест d:\xampp\htdocs\src\bin\*.txt

Тествам в момента на локална машина.
shell_exec(); ми връща NULL, а през конзолата ми казва
FINDSTR: Cannot open ?:'??'
FINDSTR: Cannot open ?<??'

User avatar
Ticketa
Турист
Турист
Posts: 521
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 23
Location: in /root
Contact:

Re: Търсачка във файлове

Post by Ticketa » Fri May 08, 2020 1:15 pm

findstr /I Тест d:\xampp\htdocs\src\bin\*.txt 2>nul

Опитай така

https://stackoverflow.com/questions/308 ... 1#30814001
Last edited by Ticketa on Fri May 08, 2020 1:20 pm, edited 1 time in total.

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3302
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Re: Търсачка във файлове

Post by dakata__92 » Fri May 08, 2020 1:17 pm

Ticketa wrote:
Fri May 08, 2020 1:15 pm
findstr /I Тест d:\xampp\htdocs\src\bin\*.txt 2>nul

Опитай така
Пробвах. Само зачиства грешката и нищо повече.

User avatar
Ticketa
Турист
Турист
Posts: 521
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 23
Location: in /root
Contact:

Re: Търсачка във файлове

Post by Ticketa » Fri May 08, 2020 1:23 pm

Възможно е да греша флага /I , довечера като седна пред лаптопа ще погледна и ще пиша отново

Ако имаш възможност и не е конфиденциалност хвърли 2-4 реда от текста за да направя тест и ще пиша

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3302
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 126

Re: Търсачка във файлове

Post by dakata__92 » Fri May 08, 2020 1:47 pm

Ticketa wrote:
Fri May 08, 2020 1:23 pm
Възможно е да греша флага /I , довечера като седна пред лаптопа ще погледна и ще пиша отново

Ако имаш възможност и не е конфиденциалност хвърли 2-4 реда от текста за да направя тест и ще пиша

Пробвай до тогава и замени флага /I с флага /F
https://docs.microsoft.com/en-us/window ... ds/findstr
Всякакви варианти тествах.
findstr /s /i Тест d:\xampp\htdocs\src\bin\*.txt

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 891
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 63

Re: Търсачка във файлове

Post by Revelation » Fri May 08, 2020 3:25 pm

Ако ти трябва за теб само, си включи WSL с едно Убунту и рънни линукската команда.


Иначе с PHP, най-вероятно трябва да си спретнеш нещо с pthreads или Process Control, за да ускориш процеса.

Ако не това, то аз бих разделял работата, подобно на Binary Search, но не точно. Понеже са много файлове, пускаш отпред и отзад да почнат да се ровят файловете. Ако не зареждаш целия файл в паметта, то тогава ще го четеш линейно (което е по-бавно). Ако не ти пречи да ги зареждаш в паметта, то ще можеш отново да ги четеш отпред и отзад, като естествено, трябва да ползваш един флаг, който да каже на всички, че си намерил каквото търсиш и да спре всички цикли и да изчисти паметта.

Ако успееш да го подкараш паралелно, ще е най-добре.

Post Reply