7

Я ищу любой инструмент или инструменты командной строки с открытым исходным кодом, которые позволят мне индексировать и искать большое количество текстовых файлов. Примерный поиск будет плюсом. Инструмент должен только напечатать файлы, которые соответствуют, хотя некоторый контекст соответствия был бы полезен. Инструмент с графическим интерфейсом бесполезен для моего приложения, а также не выполняет поиск файлов один за другим (например, grep). Я в основном ориентируюсь на платформы Unix (OSX, Linux, BSD).

РЕДАКТИРОВАТЬ: меня не интересует какой-либо инструмент, который общесистемный, или должен работать в фоновом режиме. По сути, я хочу создать индекс для дерева каталогов, заполненного текстовыми файлами, а затем иметь возможность поиска по нему. Предпочтительно индекс представляет собой один или несколько файлов, для которых я могу указать местоположение.

Есть идеи?

5 ответов5

3

Если вы хотите искать файлы по имени файла:

Стандартным инструментом Unix для этого является locate. Он создает базу данных файлов в задании cron, а затем locate поиска по совпадениям.

Это часть большинства дистрибутивов Linux (обычно это пакет "locate" или "mlocate").

Если вы хотите искать файлы по содержанию:

Существуют различные поисковые системы, которые будут индексировать документы для вас (некоторые даже поддерживают другие форматы, кроме обычного текста, например, текстовый процессор). Примерами могут служить Beagle и Google Desktop. В Википедии есть довольно исчерпывающий список:

http://en.wikipedia.org/wiki/List_of_search_engines#Desktop_search_engines

Редактировать:

Если вам не нужна поисковая система, которая работает в фоновом режиме или автоматически индексирует все ваши файлы, вы все равно можете использовать поисковую систему для настольных компьютеров. Большинство из них позволяют вам контролировать процесс индексирования, поэтому вы можете запустить индексирование вручную и указать, какие каталоги индексировать и куда поместить файл индекса.

2

Я нашел то, что искал. Swish++ может индексировать каталог файлов (не только текст) и представляет собой набор инструментов командной строки. Похоже, это переписать Swish-е.

2

Я использовал swish-e, но это было около десяти лет назад. С тех пор развитие, похоже, застопорилось (иногда оно означает «стабильный», а не «мертвый»), но оно может работать на вас.

2

Лучшее, что вы можете сделать, это передать текстовые файлы в базу данных MySQL и использовать систему сопоставления FullText. Это даст очень быстрый поиск с рейтингом того, насколько хорошо результаты соответствуют поисковому запросу.

Взаимодействие базы данных MySQL с другими системами, такими как веб-сайт для поиска документов и т.д., Было бы достаточно простой задачей.

Полезные ресурсы:

0

Если немного сценариев на Python подходит вам, посмотрите на whoosh:https://bitbucket.org/mchaput/whoosh/wiki/Home

И, наверное, вы смотрели на grep. Если ваша файловая база достаточно мала, чтобы поместиться в ОЗУ (буферный кеш), это на самом деле довольно быстро. Зависит от того, насколько сложны ваши запросы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .