У меня есть php, linux-сервер. У него есть папка с именем notes_docs
, которая содержит более 600 000 файлов txt. Структура папки notes_docs
выглядит следующим образом:
- notes_docs
- files_txt
- 20170831
- 1_837837472_abc_file.txt
- 1_579374743_abc2_file.txt
- 1_291838733_uridjdh.txt
- 1_482737439_a8weele.txt
- 1_733839474_dejsde.txt
- 20170830
- 20170829
Мне нужно предоставить утилиту быстрого поиска текста, которая может показывать результаты в браузере. Поэтому, если мой пользователь ищет "новый йорк", все файлы, имеющие в них "новый йорк", должны быть возвращены в массив. Если пользователь ищет "foo", все файлы с "foo" в них должны быть возвращены.
Я уже пробовал код с помощью scandir
и Directory Iterator
, который слишком медленный. Для поиска требуется больше минуты, даже тогда поиск не был завершен. Я попробовал ubuntu find
, который снова замедлился, заработав минуту. потому что слишком много итераций папок, а notes_docs
текущий размер составляет более 20 ГБ.
Любое решение, которое я могу использовать для его ускорения, приветствуется. Я могу внести изменения в дизайн, интегрировать свой PHP-код в завиток к другому языковому коду. Я также могу вносить изменения в инфраструктуру в крайних случаях (как при использовании в памяти чего-то).
Я хочу знать, как это делают люди в промышленности? Люди в действительности, Zip Recruiter обеспечивают поиск файлов.
Обратите внимание: у меня 2 ГБ - 4 ГБ в ОЗУ, поэтому загрузка всех файлов в ОЗУ все время неприемлема.
EDIT - Все приведенные ниже вводы великолепны. Для тех, кто пришел позже, мы закончили использование Lucene для индексирования и текстового поиска. Это было действительно хорошо