Как реализовать веб-базу данных поиска файлов с помощью текстового поиска - PullRequest
1 голос
/ 20 апреля 2010

У меня есть ряд таких файлов:

foo1.txt.gz
foo2.txt.gz
bar1.txt.gz
..etc..

и файл в табличном формате, который описывает эти файлы:

foo1 - Explain foo1
foo2 - Explain foo2
bar1 - Explain bar1
..etc..

Что я хочу сделать, так это создать веб-сайт с простой панелью поиска и позволять людям печатать foo1 или просто foo и, наконец, верните файл (-ы) gzip и соответствующее объяснение файла (-ов).

Какой лучший способ реализовать это и какие инструменты мне следует использовать. Извините, я совершенно новичок в этой области.

Обновление: В частности, я хочу дать список URL-адресов, связанных с соответствующими файлами. Чтобы люди могут позже выбрать, какой из них загрузить.

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

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

В глубине души «указатель» - это то же самое, что вы найдете в конце учебника, но воплотите эту идею в компьютерный мир. Вы захотите просмотреть свои таблицы описаний и создать ключ / значение «словарь», «хэш», или как называется эквивалентная структура вашего языка. Ключами будут слова, которые вы найдете в вашем описании. Значения будут массивом (или списком, или как там называется ваш язык) URL-адресов, в которых можно найти это слово.

Когда вы обрабатываете запрос, вы разбиваете слова в запросе и просматриваете каждое из них в своем словаре. Тогда каждый «URL» может получить очко за каждое слово, которое содержит URL. Затем вы оцениваете свои результаты в зависимости от того, сколько очков имеет каждый URL. В качестве альтернативы вы можете вернуть только результаты, содержащие все слова, выполнив заданное пересечение между всеми различными массивами URL, которые вы найдете, выполнив поиск ваших слов.

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

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

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

и т.д.. и т.д.

Возможно, вы захотите не создавать этот индекс для каждого запроса (в противном случае, какой смысл?), Поэтому вы захотите сохранить его на диск и загрузить (или его части) в память во время запрос. Используете ли вы базу данных или что-то для этого, я оставляю на ваше усмотрение.

1 голос
/ 20 апреля 2010
  1. вы строите форму поиска HTML.

    • Форма имеет элемент ввода текста

    • При отправке форма отправляет значение строки поиска из внутреннего сценария (например, сценарий Perl CGI, для простоты реализованный с использованием CGI.pm, хотя в наши дни используются более современные веб-платформы, такие как как Perl's Catalyst или шаблоны, такие как EmbPerl)

  2. Внутренний скрипт ищет подходящие файлы:

    • Откройте список подходящих файлов в Perl, используйте glob("*$search*.txt.gz") или модуль File :: Find, если файлы находятся в подкаталогах.

    • Откройте, прочитайте и проанализируйте файл описания в базе файлов хеш-сопоставлений "foo1" для описания.

    • запустить grep для поиска имен файлов, соответствующих строке поиска (с использованием регулярного выражения)

    • Распечатайте страницу отчета в формате HTML с таблицей, в которой указаны найденные имена файлов и их описания - эта страница будет отправлена ​​обратно в браузер.

    • Имя файла будет ссылкой (см. Ниже) для загрузки файла. Самый простой способ сделать это - добавить файлы в каталог внутри дерева "htdocs" - например, где-то в каталоге, где веб-сервер ищет документы. Тогда вы можете просто ссылаться на них по URL. Например, если вашей домашней страницей является /home/webpages/main/index.html (с URL-адресом http://mysite.com/index.html),, вы можете поместить свои файлы как /home/webpages/main/foofiles/foo1.txt.gz и URL будет http://mysite.com/foofiles/foo1.txt.gz.

    Вы должны убедиться, что ваш веб-сервер может отправлять эти файлы с соответствующим заголовком содержимого (например, не будет отправлять их в виде текста / html).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...