Sql server 查找全文索引为空的记录

Sql server 查找全文索引为空的记录,sql-server,full-text-indexing,Sql Server,Full Text Indexing,我将文档二进制文件(主要是PDF文件)存储在SQL Server数据库中,并使用Acrobat IFilter和全文索引来搜索文件内容 然而,这些PDF中的一些是用真正便宜的软件扫描的,没有进行OCR,它们是文档的图像,而不是带有可搜索文本的适当文档。我想确定数据库中的哪些记录没有可搜索文本,以便可以对其进行OCR识别并重新上传 我可以使用sys.dm_fts_index_keywords_by_document获取至少有一个全文条目的文档ID。我尝试将不同的ID列表与文档表连接起来,以查找不匹

我将文档二进制文件(主要是PDF文件)存储在SQL Server数据库中,并使用Acrobat IFilter和全文索引来搜索文件内容

然而,这些PDF中的一些是用真正便宜的软件扫描的,没有进行OCR,它们是文档的图像,而不是带有可搜索文本的适当文档。我想确定数据库中的哪些记录没有可搜索文本,以便可以对其进行OCR识别并重新上传

我可以使用sys.dm_fts_index_keywords_by_document获取至少有一个全文条目的文档ID。我尝试将不同的ID列表与文档表连接起来,以查找不匹配的记录,但结果非常缓慢-我有大约20000个文档,大约数百页,在我取消查询之前,查询运行了20多分钟


有更好的方法吗?

我设法想出了一个解决方案,在一组40000个文档上运行只需大约2分钟

1创建一个临时表来存储sys.dm\u fts\u index\u关键字\u by\u document中的文档id值

2通过按文档id分组来填充它。几乎所有文档都至少有一些条目,因此选择一个关键字计数阈值,表明全文索引没有有意义的信息。我用了30个,但大多数糟糕的文档只有3-5个。在我的特殊情况下,存储PDF二进制文件的表是PhysicalFile

3如果需要,将临时表连接到列出了所需信息的任何其他表。在我的特殊情况下,MasterDocument包含文档标题,我还包括一些查找表

create table #PhysicalFileIDs (PhysicalFileID int, KeywordCount int)

insert into #PhysicalFileIDs (PhysicalFileID, KeywordCount)
    select document_id, count(keyword) from sys.dm_fts_index_keywords_by_document (db_id(), object_id('PhysicalFile'))
    group by document_id having count(keyword) < 30

select MasterDocument.DocumentID, MasterDocument.Title, ProfileType.ProfileTypeDisplayName, #PhysicalFileIDs.KeywordCount
    from MasterDocument
    inner join #PhysicalFileIDs on Masterdocument.PhysicalFileID = #PhysicalFileIDs.PhysicalFileID
    inner join DocumentType on MasterDocument.DocumentTypeID = DocumentType.DocumentTypeID
    inner join ProfileType on ProfileType.ProfileTypeID = DocumentType.ProfileTypeID

drop table #PhysicalFileIDs

我经历了这一切,没有找到更好的答案……我的记录集没有那么大,但仍然需要一些时间。执行并离开一天……我建议将其作为insert语句执行,以便将所有行转储到一个表中,以便稍后调用。无论谁对此问题有答案,我都会获得额外的分数。目前我还没有连接到合适的数据库,但我经常发现我可以提取ms提供的过程的sql代码,等等。如果你这样做,也许你可以确定完整查询的有用子集,从而运行得更快。我记得我可以将RDP发送到合适的机器上。sys.dm_fts_index_keywords_By_文档位于master、system、table值函数下,但无法导出为create函数脚本,因此没有帮助。。