我正在尝试让iFilter工作,我正在使用MS SQL Server 2017/2016开发人员版本运行Windows 10 64位。我从Adobe website下载了64位版本的iFilter 11,我跟着他们的导游here。尽管它适用于MS SQL 2008/2012,但它仍然很容易理解。
我的问题是全文搜索不会返回任何结果。
我安装了64位iFilter 11并将其添加到系统PATH中。我确认这是通过重新启动pc并从cmd中找到DLL来实现的。
之后,因为我没有MSSQL Server的FullText搜索组件,所以我安装了它并启动了SQL全文过滤器守护程序启动器(我还重新启动了主MSSQL Server实例)。
我已经有了一个数据库,显然默认启用了FullText搜索,所以我继续安装。
我加载了组件并通过运行以下查询验证了所有内容都已被识别:
GO
PRINT FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')
exec sp_fulltext_service 'load_os_resources', 1
exec sp_fulltext_service 'verify_signature', 0
/* Verify if iFilter is installed */
SELECT * FROM sys.fulltext_document_types WHERE document_type = '.pdf'
GO
/* Restart MSSQL before continuing */
/* Enable fulltext search on the database */
Use [db]
GO
EXEC sp_fulltext_database 'enable'
GO
Use [db]
DROP TABLE pdfifiltertable
GO
CREATE TABLE pdfifiltertable(
PdfID INT IDENTITY NOT NULL,
PdfFileName VARCHAR(MAX),
Ext VARCHAR(10),
PdfText VARBINARY(MAX),
CONSTRAINT PK_PdfID PRIMARY KEY (PdfID)
)
GO
CREATE FULLTEXT CATALOG pdfCatalog AS DEFAULT
GO
CREATE FULLTEXT INDEX ON pdfifiltertable([PdfText] Type column [Ext] LANGUAGE 'French'
) KEY INDEX PK_PdfID with change_tracking auto
GO
/* Check if the table correctly have a fulltext_index */
SELECT distinct
object_name(fic.[object_id]) table_name,
[name] column_name
FROM
sys.fulltext_index_columns fic
INNER JOIN sys.columns c
ON c.[object_id] = fic.[object_id]
AND c.[column_id] = fic.[column_id]
GO
/* Try to search (doesn't work) */
SELECT PdfFileName
FROM [db].[dbo].[pdfifiltertable]
WHERE CONTAINS(PdfText, 'Adobe')
通过查询,我能够:
遵循Adobe自己的指南,我创建了他们的示例WinForm应用程序来上传PDF。我上传了2个PDF,一个用法语,另一个用英语。然后我搜索了应该包含在其中的简单单词但没有返回结果。
我已经尝试重建目录并重建我的pdf表的所有索引,但它没有改变结果。
我尝试从Adobe PDFiFilter64installer.zip
下载文件ftp来安装iFilter 9,以防最新版本出现任何问题。不幸的是,它也不起作用。我在MSSQL服务器上运行了一个分析器,没有抛出任何错误。
我搜索并收集了多个相关问题,帮助我构建完整的故障排除。我将链接它们,以便它们更容易一起搜索:
SQL Server : full-text pdf search results using contains and ifilters - 没有回答
Using full-text search with PDF files in SQL Server 2008 - 没有MSSQL 2017的工作答案。
Using full-text search with PDF files in SQL Server 2005 - 也不适用于MSSQL 2017。
我想也许iFilter可能不适用于较新的操作系统和较新版本的MSSQL。
尝试使用iFilter 9 - ftp://ftp.adobe.com/pub/adobe/acrobat/win/9.x/PDFiFilter64installer.zip并将其安装到一个短路径(C:\ iFilter适用于我)。
我得到它在SQL Server 2019上工作
按照这些提示https://dba-presents.com/index.php/databases/sql-server/48-full-text-search-with-pdf-documents-in-sql-server-2014使用更新的URL到iFilter:https://supportdownloads.adobe.com/thankyou.jsp?ftpID=5542&fileID=5550我使用了我的iFilter路径的短名称版本(即c:\ SQLSer~1 \ IFilter)我有一点挑战让SQL Server帐户访问IFilter \ bin目录,但使用这个https://www.thewindowsclub.com/fix-failed-to-enumerate-objects-in-the-container来帮助我顺利完成。
在我完成所有步骤后,我重新启动了计算机(因为没有这样做对我不起作用),现在它适用于我。希望这对其他人有用。