Как мне очень быстро найти строку во многих текстовых файлах?

Я работаю над программой для своей дискуссионной группы, и одной из ее особенностей будет поиск в текстовых файлах определенных ключевых слов. Поскольку на подготовку выступлений в дебатах всегда есть ограниченное время, скорость является моим абсолютным главным приоритетом, но методы поиска, которые я пробовал до сих пор, недостаточно быстры. Самый быстрый способ, который я пробовал, - это использовать grep для поиска каждого из файлов и технически работает, но для него есть около 2500 файлов для поиска, поэтому, хотя на каждый файл требуется около 5 миллисекунд, это время складывается очень быстро, когда поиск по нескольким ключевым словам или поиск разных вещей, которые могут понадобиться пользователю.

Что мне действительно нужно, так это способ, возможно, гарантировать, что моя программа не будет искать в каждом документе при поиске, или что-то, что существенно сократит количество документов, которые она должна просматривать. Кто-нибудь знает, возможно ли что-то подобное? Или, если нет, может ли кто-нибудь указать мне направление исследования, которое могло бы сократить время поиска другими способами?

stackoverflow.com/questions/9452701/…
Elliott Frisch 28.03.2018 22:51

классифицируйте файлы по подмножествам, чтобы вам не приходилось искать все 2500+ файлов

RAZ_Muh_Taz 28.03.2018 23:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
89
2

Ответы 2

Я думаю, вы ищете поисковик по тексту. Я верю, что Apache Lucene вам поможет. Что вы можете сделать, так это создать индекс всех ваших файлов на основе содержимого этих файлов. Затем вы можете быстро найти в этом указателе интересные слова и предложения, чтобы Lucene сообщила вам, в каком файле это слово / предложение лучше всего соответствует. Индекс должен храниться в файле, поэтому вам не нужно заново создавать его каждый раз, когда вы начинаете поиск, а расширять его только при появлении нового документа. Lucene сделает для вас даже больше, потому что может искать похожие слова (как это делает Google). Я думаю, что описание использования движка Lucene выходит за рамки этого короткого ответа, но я считаю, что вы найдете хорошее вступление по этой ссылке: http://www.lucenetutorial.com/sample-apps/textfileindexer-java.html

Либо используйте Lucene, либо какой-то индекс, как указано Виктором.

Или посмотрите другие решения, подобные grep:

Или, если вы хотите научиться программировать, попробуйте сделать это самостоятельно!

Другие вопросы по теме