2016-12-26 69 views
2

我试图建立全文检索的表Azure的SQL Server全文搜索不会对.DOC的.docx类型

DocumentBody工作。

我所做的一切,使其工作:

EXEC sp_fulltext_catalog 'DocumentsCatalog', 'create'; 
EXEC sp_fulltext_catalog 'DocumentsCatalog', 'start_full' 
EXEC sp_fulltext_table 'dbo.DocumentBody', 'create', 'DocumentsCatalog', 'PK_DocumentBody' 
EXEC sp_fulltext_column 'dbo.DocumentBody', 'Value', 'add', 0, 'Type' 
EXEC sp_fulltext_table 'dbo.DocumentBody', 'start_change_tracking' 
EXEC sp_fulltext_table 'dbo.DocumentBody', 'update_index' 

也是为了防止有关我的数据库,我也支持这些类型的文件的问题:

SELECT * 
FROM sys.fulltext_document_types 
WHERE document_type IN ('.doc', '.docx', '.html') 

输出:

document_type |class_id       | path |version  |manufacturer 
--------------|------------------------------------|---------|--------------|----------------------- 
.doc   |64F1276A-7A68-4190-882C-5F14B7852019| NULL |    | 
.docx   |5A98B233-3C59-4B31-944C-0E560D85E6C3| NULL |    | 
.html   |E0CA5340-4534-11CF-B952-00AA0051FE20| NULL | 12.0.6828.0 | Microsoft Corporation 

之后,我插入了两个类型为“.html”和“.docx”的文档。

当我搜索

SELECT * 
FROM DocumentBody 
WHERE CONTAINS([Value], 'some html content') 

它工作正常,但是当我做同样的“的.docx”的内容,它没有返回。

有谁知道为什么全文搜索'.docx'或'.doc'类型没有按预期工作?

回答

2

Azure SQL数据库全文搜索不支持“二进制”文件格式,如Office和PDF,只有文本格式(包括html)。

您可以通过编程提取Office文档的文本,并存储在全文中提取的文本索引列

+0

如果这样什么原因来设置文件类型?你有没有提及描述这些方法的MSDN? –

+1

提取文本只是一个解决方法 - https://blogs.msdn.microsoft.com/jasonz/2009/08/31/sample-parsing-content-in-c-using-ifilter/ – ErikEJ

+1

谢谢埃里克。 我终于想通了。因此,对于本地SQL Server,我可以为不同类型的文档安装IFilter,并按预期使用它。对于Azure SQL数据库,它不起作用,因为它不支持.doc和.docx类型的文档,我必须使用描述的方法 –