2008-11-07 10 views
7

J'ai un problème étrange avec l'indexation des fichiers PDF dans SQL Server 2005 et j'espère que quelqu'un pourra vous aider. Ma base de données a une table appelée MediaFile avec les champs suivants - MediaFileId int identité pk, FileContent image et FileExtension varchar (5). J'ai mon application web qui stocke le contenu du fichier dans cette table sans problème, et je suis capable d'utiliser la recherche en texte intégral sur doc, xls, etc sans problèmes - la seule extension de fichier ne fonctionne pas est PDF. Lorsque vous effectuez des recherches de texte intégral sur cette table pour trouver des mots que je connais dans les fichiers PDF enregistrés dans la table, ces fichiers ne sont pas renvoyés dans les résultats de la recherche. Le SE est Windows Server 2003 SP2 et j'ai installé Adobe iFilter 6.0. En suivant les instructions sur this blog entry, j'ai exécuté les commandes suivantes:Utilisation de la recherche en texte intégral avec des fichiers PDF dans SQL Server 2005

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

Après cela, je redémarré le serveur SQL, et vérifié que les iFilter pour les extensions PDF est correctement installé en exécutant la commande suivante:

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

Cela renvoie les informations suivantes, qui semble correct:

document_type: .pdf
chemin : C : \ Program Files \ Adobe \ PDF IFilter 6.0 \ pdffilt.dll

Je (re) créé l'index sur la table MediaFile, en sélectionnant ContenuFichier comme la colonne à l'index et le FileExtension comme son type. L'assistant crée l'index et se termine avec succès. Pour tester, j'effectuer une recherche comme ceci:

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

Cela renvoie les fichiers DOC qui contiennent ce terme, mais pas de fichiers PDF, même si je sais qu'il ya certainement des fichiers PDF dans le tableau qui contiennent le mot maison. Incidemment, je l'ai fait fonctionner une fois pendant quelques minutes, où la recherche ci-dessus a renvoyé les fichiers PDF corrects, mais ensuite il a juste cessé de fonctionner à nouveau sans raison apparente.

Des idées sur ce qui pourrait empêcher SQL Server 2005 d'indexer des fichiers PDF, même si Adobe iFilter est installé et semble être chargé?

Répondre

7

Merci Ivan. Géré pour finalement obtenir ce travail en commençant tout à partir de zéro. Il semble que l'ordre dans lequel les choses sont faites fait une grande différence, et le conseil donné sur le blog lié pour désactiver le paramètre 'load_os_resources' après le chargement de l'iFilter n'est probablement pas la meilleure option, car cela entraînera l'iFilter ne pas être chargé lorsque le SQL Server est redémarré.

Si je me souviens bien, la séquence des étapes qui ont finalement travaillé pour moi était comme suit:

  1. Assurez-vous que la table ne dispose pas d'un index déjà (et le cas échéant, supprimez-le)
  2. Installer Adobe iFilter
  3. Exécutez la commande exec sp_fulltext_service 'load_os_resources', 1;
  4. Exécutez la commande exec sp_fulltext_service 'verify_signature', 0;
  5. Redémarrez SQL Server
  6. Vérifiez PDF IFilter est installé
  7. Créer un index en texte intégral sur la table
  8. faire plein réindexer

Bien que cela a fait le tour, je suis tout à fait sûr que je effectué ces étapes plusieurs fois avant de finalement commencer à fonctionner correctement.

+0

*** HOW-TO ***: 1.) vérifier PDF iFilter est installé par programmation? 2.) créate ** index de texte intégral ** 'programatically'? 3.) faites le ** ré-index complet ** «par programmation»? – Kiquenet

0

J'ai juste lutté avec lui pendant une heure, mais finalement l'ai fonctionné. Je l'ai fait tout ce que vous avez fait, alors essayez simplement de simplifier la requête (je l'ai remplacé * avec le nom du champ et des guillemets doubles enlevés sur terme):

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

également lorsque vous créez l'index de texte intégral assurez-vous que vous spécifiez la langue. Et la dernière chose est peut-être que vous pouvez essayer de changer le type de champ de Image à varbinary(MAX).

Questions connexes