2015-06-29 10 views
0

Прежде всего, спасибо за пришедшие здесь:поиска SQL FullText для PDF файлов

Я написал сценарий в SQL смог найти слова в файл, с большим количеством помощи некоторых веб-сайтов (http://dzapart.blogspot.fr/2012/04/full-text-search-with-pdf-in-microsoft.html)

проблема здесь:

у меня есть "C: \ TP3_compte_rendu.pdf", который является PDF-файл, и 'C: \ TP3.txt' текст этого файла:

Итак, два файлы имеют одинаковый текст.

Затем я запускаю мой код для создания таблицы/индекса/каталог:

-- Creation de la table 

CREATE TABLE dbo.DocumentFiles 
(
DocumentId uniqueidentifier Primary KEY DEFAULT newsequentialid(), 
Nom nvarchar(50) NOT NULL, 
Extension nvarchar(10) NOT NULL, 
Description nvarchar(1000) NULL, 
FileStream_Id uniqueidentifier NOT NULL, 
Fichier varbinary(MAX) NOT NULL DEFAULT (0x) 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 


-- Creation de l'index  



EXEC sp_fulltext_service 'load_os_resources',1 
EXEC sp_fulltext_service 'verify_signature', 0 
EXEC sp_fulltext_database 'enable' 
GO 
IF NOT EXISTS (SELECT TOP 1 1 FROM sys.fulltext_catalogs WHERE name = 'Ducuments_Catalog') 
BEGIN 
EXEC sp_fulltext_catalog 'Ducuments_Catalog', 'create'; 
END 

DECLARE @indexName nvarchar(255) = (SELECT Top 1 i.Name from sys.indexes i 
           Join sys.tables t on i.object_id = t.object_id 
           WHERE t.Name = 'DocumentFiles' AND i.type_desc = 'CLUSTERED') 

           PRINT @indexName 

-- Creation du catalogue 

EXEC sp_fulltext_table 'DocumentFiles', 'create', 'Ducuments_Catalog', @indexName 
EXEC sp_fulltext_column 'DocumentFiles', 'Fichier', 'add', 0, 'Extension' 
EXEC sp_fulltext_table 'DocumentFiles', 'activate' 
EXEC sp_fulltext_catalog 'Ducuments_Catalog', 'start_full' 
EXEC sp_help_fulltext_system_components 'filter'; 

ALTER FULLTEXT INDEX ON [dbo].[DocumentFiles] ENABLE 
ALTER FULLTEXT INDEX ON [dbo].[DocumentFiles] SET CHANGE_TRACKING = AUTO 

Я использую IFilter сделать полнотекстовый поиск по PDF-файлов:

SELECT document_type, path FROM sys.fulltext_document_types WHERE document_type = '.pdf' 

Он показывает мне:

.pdf | C:\Program Files\Adobe\Adobe PDF iFilter 11 for 64-bit platforms\bin\PDFFilter.dll 

Потому что я вижу «.pdf» и хорошую .dll, все в порядке, установлен IFilter.

Итак, я ставлю в этой таблице на два файла, .txt и .pdf с тем же текстом:

-- Entrée du document 

INSERT INTO dbo.DocumentFiles(Nom, Extension,FileStream_Id, Fichier) 
SELECT 

    'TP3.pdf' AS Nom 
    , 'pdf' AS Extension 
    ,'0E984725-C51D-4BF4-9960-E1C80E27ABA0wrong' AS FileStream_Id 
    , * FROM OPENROWSET(BULK 'C:\TP3_compte_rendu.pdf', SINGLE_BLOB) 
    AS Fichier; 
GO 

-- Entrée du document 

INSERT INTO dbo.DocumentFiles(Nom, Extension,FileStream_Id, Fichier) 
SELECT 

'TP3.txt' AS Nom 
, 'txt' AS Extension 
,'0E984725-C51D-4BF4-9960-E1C80E27ABB0wrong' AS FileStream_Id 
, * FROM OPENROWSET(BULK 'C:\TP3.txt', SINGLE_BLOB) 
AS Fichier; 
GO 

Затем поиска:

SELECT d.* FROM dbo.DocumentFiles d 
WHERE Contains(d.Fichier, '%propose%') 

И это показывает мне .. . Только .txt.

С таким же текстом видно только .txt, но IFilyter установлен .. Я действительно не понимаю.

+0

Решение: IFilter 11 прослушивается, вы должны использовать 9-ю версию: но мой код хорошо, поэтому я надеюсь, что это поможет кому-то! – Pingu

ответ

0

Вы можете проверить это:

  • Помните, что вам нужно добавить PDF Ifilter в PATH. См. Руководство по установке Adobe PDF iFilter.
  • Содержит подстановочные знаки *, а не %. Принимаются только обратные подстановочные знаки, например: *ckoverflow* не работает, stackover* работает.