2008-11-07 36 views
7

PDF dosyaları ile tam metin arama kullanma SQL Server 2005'te PDF dosyalarını dizinleme ile ilgili garip bir sorun var ve birilerinin yardımcı olabileceğini umuyorum. Veritabanım, MediaFileId int identity pk, FileContent image ve FileExtension varchar (5) ile MediaFile adlı bir tablonun var. Web uygulamasımın hiç bir sorun olmadan bu tablodaki dosya içeriğini saklıyorum ve doc, xls, vs üzerinde tam metin arama yapmadan problem çözmeden kullanabilmem mümkün değil - tek dosya uzantısı çalışmıyor. Tabloda kayıtlı PDF dosyalarının içinde bulunduğunu bildiğim kelimeler için bu tabloda tam metin aramaları yapıldığında, bu dosyalar arama sonuçlarında döndürülmez.SQL Server 2005

İşletim sistemi Windows Server 2003 SP2 ve Adobe iFilter 6.0 yükledim. this blog entry talimatları ardından, aşağıdaki komutları yürütür: Bundan sonra

exec sp_fulltext_service 'load_os_resources', 1; 
exec sp_fulltext_service 'verify_signature', 0; 

, ben SQL Server yeniden ve iFilter PDF uzantıları için aşağıdaki komutu yürüterek doğru takıldığından emin doğrulandı:

select document_type, path from sys.fulltext_document_types where document_type = '.pdf' 

Bu döndürür doğru görünüyorsa aşağıdaki bilgiler:

document_type: .pdf
yolu: C : \ Program Files \ Adobe \ PDF IFilter 6.0 \ PDFFILT.dll

Sonra (yeniden) endeksine sütuna ve türü olarak FileExtension olarak fileContent seçerek MediaFile masaya endeksi oluşturdu. Sihirbaz dizini oluşturur ve başarıyla tamamlar. Ben kelimesini içeren tablodaki PDF dosyaları kesinlikle olduğunu biliyoruz ancak

SELECT MediaFileId, FileExtension FROM MediaFile WHERE CONTAINS(*, '"house"'); 

Bu, bu terimi içeren DOC dosyalarını döndürür, ancak herhangi bir PDF dosyaları: test etmek için, böyle bir arama yaptıktan ediyorum ev.

Bu arada, birkaç dakika boyunca bir kez çalışıyorum, yukarıdaki aramada doğru PDF dosyaları döndü, ancak daha sonra hiç bir nedenden ötürü yeniden çalışmayı durdurdu.

Adobe iFilter yüklüyse ve yüklü gibi görünse bile, SQL Server 2005'i PDF'leri dizine eklemeden ne gibi bir fikir verebilir?

cevap

7

Teşekkürler Ivan. Sonunda herşeyi sıfırdan başlayarak çalışmayı başaracak şekilde yönetildi. İşlerin yapıldığı sıra, büyük bir fark yaratıyor gibi görünüyor ve bağlantılı blogda verilen iFilter'i yükledikten sonra 'load_os_resources' ayarını kapatmak için verilen öneriler muhtemelen en iyi seçenek değil, çünkü iFilter SQL Server yeniden başlatıldığında yüklenmeyecek.

  1. yükleyin
  2. tablo zaten bir dizin yok emin olun (ve eğer öyleyse, silin): Doğru hatırlıyorsam şöyle

    , sonunda benim için çalıştı adımların sırası idi Adobe iFilter

  3. komut exec sp_fulltext_service 'load_os_resources', 1 Yürütme;
  4. Komut exec sp_fulltext_service 'verify_signature', 0;
  5. Yeniden SQL Server
  6. Ben eminim, iFilter bu hileyi Her ne kadar
  7. Do tam yeniden endeks masaya

tam metin dizini oluşturma yüklü PDF doğrulama ben Sonunda düzgün çalışmaya başlamasından önce birkaç kez bu adımları gerçekleştirdi.

+0

*** NASIL ***: 1.) 'iFilter yüklü PDF programatically' doğrulamak? 2.) créate ** tam metin dizini ** 'programatik'? 3.) ** tam yeniden indeks ** 'programatik' mi? – Kiquenet

0

Sadece bir saat boyunca bununla uğraştım, ama sonunda işe koyuldum. Eğer tam metin dizini oluştururken Ayrıca dili belirtmek emin olun

SELECT MediaFileId, FileExtension FROM MediaFile WHERE CONTAINS(FileContent, 'house') 

: Ben bu yüzden sadece sorguyu basitleştirmek için deneyin, yaptığı her şeyi yaptım (ben alan adı ve vadede kaldırıldı çift tırnak ile * değiştirilir). Ve son şey belki de alan türünü Image'dan varbinary(MAX)'a değiştirmeyi deneyebilirsiniz.

İlgili konular