Metin Arama Via Web Tabanlı Dosya Bul Veritabanı nasıl uygulanacağı

2 Cevap php

Ben bu gibi dosyalar dizi var:

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

ve bu dosyaları tanımlamak bir sekmeli dosya biçimi:

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

What I want to do is to have a website with a simple search bar and allow people to type foo1 or just foo and finally return the gzipped file(s) and the related explanation of the file(s).

What's the best way to implement this and what kind of tools should I use. Sorry I am totally new in this area.

Update: Specifically I want to give list of URLs linked to the matched files. So that people can later choose which one to download.

2 Cevap

  1. Bir HTML arama formunu oluşturmak.

    • Form, bir metin girişi elemanı vardır

    • Sunulmasına ilişkin, form, bu gün böyle Perl Catalyst veya çiftleşmiş çerçeveler gibi daha modern web çerçeveler kullanmak rağmen (örneğin, bir Perl CGI script, basitlik için CGI.pm kullanarak iplemented bir arka-uç komut dosyasına gelen arama dize değerini gönderir örneğin EmbPerl gibi)

  2. Arka-uç komut eşleşen dosyaları arar:

    • , Perl eşleşen dosyaların listesini açın glob("*$search*.txt.gz") kullanın veya Dosya :: dosyaları alt dizinleri ise modülü bulun.

    • Açık, okuma ve açıklamaları bir karma eşleme dosyası tabanına açıklamasına "foo1" halinde dosya ayrıştırmak.

    • grep (düzenli ifade kullanarak) arama dizesi eşleşen dosya adları aramak için koşmak

    • Bulunan dosya adlarını ve açıklamalarını listeleme tablo ile HTML rapor sayfasını yazdırabilirsiniz - bu sayfa tarayıcıya geri gönderilir.

    • Dosya adı bir dosya indirmek için bir bağlantı (aşağıya bakınız) olacaktır. Bunu yapmak için en kolay yaklaşım "htdocs" ağaç içinde bir dizine dosyaları eklemek için - örneğin, yere web sunucusu belgeleri arar bir dizin içinde. Sonra sadece URL bunları başvuruda bulunabilir. Ana sayfa / home / web sayfalarını / ana / index.html Örneğin, (bir URL ile http://mysite.com/index.html), sen home/webpages/main/foofiles/foo1.txt / gibi dosyalarınızı koyabilirsiniz. gz ve URL olurdu http://mysite.com/foofiles/foo1.txt.gz.

    Eğer web sunucusu (örneğin, metin / html olarak göndermek olmaz) uygun içerik başlığı ile bu dosyaları göndermek emin olmalısınız.

Performans nedenleriyle, ne olasılıkla yapmak isteyeceğiniz bir periyodik süreç bir dizin oluşturmak olması. Orada bunu yapmak çok karmaşık yolu vardır, ancak çok basit bir şekilde oldukça makul yararlı bir şey yapmak da mümkündür.

Kalbi, bir "indeks" Bir ders kitabının sonunda bulmak, ancak bir bilgisayar dünyasına bu fikri çevirmek istediğiniz şey çok aynı tür. Siz açıklamaları sizin tabloları taramak istiyorum, ve bir anahtar / değer "sözlük" inşa edeceğiz, "karma", ya da ne olursa olsun dilinizin equivelent yapısı denir. Tuşları size açıklama bulmak kelime olacaktır. Değerleri, o kelime bulunamadı hangi URL'ler bir dizi (veya liste ya da diliniz ne olursa olsun diyor) olacak.

Bir sorgu işlemek zaman, sorguda kelimeleri parçalayın, ve sözlükteki her biri bakmak. Sonra her "url" url içeren her kelime için bir puan alabilirsiniz. Daha sonra her url kaç puan dayanarak sonuçlarınızı rütbe. Alternatif olarak, size kelime bakarak bulmak tüm çeşitli url diziler arasında bir kümesi kesişim gerçekleştirerek tüm kelimeleri içeren sonuçları dönebilirsiniz.

size ulaşmak için çalışıyoruz ne bağlı olarak, size böyle tuşları gibi kelimelerin fonetik temsillerini kullanarak yerine ham kelimelerin kendileri gibi endeksi, inşa konusunda daha sofistike alabilirsiniz. Bir arama yaptığınızda, kendi fonetik gösterimleri içine arama terimleri kırmak ve bu şekilde ortak imla hataları yapmak sorunları ortadan kaldırabilirsiniz.

Alternatif olarak her kelime için yinelenen anahtarlar yaparak doğrudan ortak imla hataları ele alabilir.

Alternatif olarak, endeks yazmak üçüz ziyade tüm sözcükleri, farklı zamanları ve çekimleri ile sözcüklerin alternatif formları yakalamak için olabilir.

vs vs

Muhtemelen her sorguda bu indeks inşa değil isteyeceksiniz (nokta ne, aksi halde?), Diske kaydetmek ve bir sorgu sırasında belleğe (veya bir kısmını) yüklemek mümkün isteyeceksiniz bu yüzden. Bunu yapmak için bir veritabanı, ya da ne olursa olsun kullanımı olsun, ben size bırakıyorum.