2008-11-07 8 views
7

Ich habe ein seltsames Problem mit der Indizierung von PDF-Dateien in SQL Server 2005 und hoffe, dass jemand helfen kann. Meine Datenbank hat eine Tabelle namens MediaFile mit den folgenden Feldern: MediaFileId int identity pk, FileContent image und FileExtension varchar (5). Ich habe meine Webanwendung, die Dateiinhalte in dieser Tabelle ohne Probleme speichert, und bin in der Lage, die Volltextsuche nach doc, xls usw. ohne Probleme zu verwenden - die einzige Dateiendung, die nicht funktioniert, ist PDF. Wenn Sie in dieser Tabelle Volltextsuchen nach Wörtern durchführen, von denen ich weiß, dass sie in den in der Tabelle gespeicherten PDF-Dateien vorhanden sind, werden diese Dateien in den Suchergebnissen nicht zurückgegeben. Das Betriebssystem ist Windows Server 2003 SP2 und ich habe Adobe iFilter 6.0 installiert. Im Anschluss an die Anweisungen auf this blog entry ich die folgenden Befehle ausgeführt:Verwenden der Volltextsuche mit PDF-Dateien in SQL Server 2005

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

Danach wird neu gestartet ich den SQL Server, und überprüft, dass die iFilter für die PDF-Erweiterungen korrekt installiert ist, indem Sie den folgenden Befehl ausführen:

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

Dies gibt die folgenden Informationen, die sieht richtig:

document_type: .pdf
Pfad: C : \ Programme \ Adobe \ PDF IFilter 6.0 \ PDFFILT.dll

Dann habe ich (wieder) auf dem Mediafile-Tabelle den Index, wie filecontent der Spalte zu indizieren und die Fileextension als Typ auswählen. Der Assistent erstellt den Index und wird erfolgreich abgeschlossen. Um zu testen, ich bin eine Suche wie folgt aus:

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

Dies gibt DOC-Dateien, die diesen Begriff enthalten, aber keine PDF-Dateien, obwohl ich weiß, dass es auf jeden Fall von PDF-Dateien in der Tabelle sind, die das Wort enthalten Haus.

Übrigens, ich habe das für ein paar Minuten einmal funktioniert, wo die Suche oben die richtigen PDF-Dateien zurückgegeben, aber dann hörte es wieder auf, ohne ersichtlichen Grund zu funktionieren.

Gibt es Ideen, was SQL Server 2005 daran hindern könnte, PDFs zu indizieren, obwohl Adobe iFilter installiert ist und scheinbar geladen ist?

Antwort

7

Dank Ivan. Gelernt, um schließlich zu funktionieren, indem man alles von Grund auf neu startet. Es scheint, als ob die Reihenfolge, in der die Dinge erledigt werden, einen großen Unterschied macht, und der Ratschlag in dem verlinkten Blog, die 'load_os_resources' Einstellung nach dem Laden des iFilters zu deaktivieren, ist wahrscheinlich nicht die beste Option, da dies den iFilter verursacht nicht geladen werden, wenn der SQL Server neu gestartet wird.

Wenn ich mich richtig erinnere, die Reihenfolge der Schritte, die schließlich für mich gearbeitet wurde, wie folgt:

  1. Stellen Sie sicher, dass die Tabelle keinen Index bereits hat (und wenn ja, löschen)
  2. installieren Adobe iFilter
  3. Führen Sie den Befehl exec sp_fulltext_service 'load_os_resources', 1;
  4. Führen Sie den Befehl exec sp_fulltext_service 'verify_signature', 0;
  5. Starten Sie SQL Server
  6. Überprüfen PDF iFilter
  7. Volltextindex auf dem Tisch
  8. erstellen installiert ist
  9. Sie vollständige Re-Index

Obwohl dies der Trick, ich ganz sicher bin ich führte diese Schritte einige Male durch, bevor es schließlich richtig zu arbeiten begann.

+0

*** HOW-TO ***: 1.) Verify PDF iFilter wird 'programmatisch 'installiert? 2.) créate ** Volltextindex ** 'programmatisch'? 3.) die ** vollständige Neuindizierung ** 'programmatisch '? – Kiquenet

0

Ich habe gerade für eine Stunde damit gerungen, aber endlich funktioniert es. Ich tat alles, was Sie getan haben, so versuchen Sie einfach die Abfrage zu vereinfachen (I ersetzt * mit Feldnamen und entfernt doppelte Anführungszeichen auf term):

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

Auch wenn Sie Volltextindex stellen Sie sicher, erstellen Sie die Sprache angeben. Und die letzte Sache ist vielleicht, dass Sie versuchen können, den Feldtyp von Image zu varbinary(MAX) zu ändern.