Полнотекстовый поиск SQL для файлов 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, но установлен IFlyter.. Я правда не понимаю.


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


Ответы (1)


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

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