我正在运行SQL Server 2008 R2开发人员版。
我运行了以下内容:
exec sp_fulltext_database 'enable'
然后我创建了一个包含FileType列和FileContent列的表,其数据类型为VARBINARY(MAX)。然后我右键单击表并使用主键定义全文目录,它们是fileType列和FileContent列。然后我上传了一个文档(在C#中使用这个帮助方法)
// <summary>
/// Read the file into a byte array for full text search
/// </summary>
/// <param name="inputStream"></param>
/// <returns></returns>
private byte[] GetFile(Stream inputStream)
{
BinaryReader br = new BinaryReader(inputStream);
byte[] file = br.ReadBytes((int)inputStream.Length);
br.Close();
inputStream.Close();
return file;
}
文件上传到SQL服务器,我可以看到FileContent列中的二进制数据。
我现在正在尝试查询全文目录:
SELECT * FROM Entities.Documents
WHERE CONTAINS(FileContent, 'tablesorting')
SELECT * FROM Entities.Documents
WHERE CONTAINS(FileContent, 'Tablesorting')
SELECT * FROM Entities.Documents
WHERE FREETEXT(FileContent, 'tablesorting')
SELECT * FROM Entities.Documents
WHERE FREETEXT(FileContent, 'Tablesorting')
这些都没有返回任何数据,即使我上传的文件(Excel电子表格版本2010)包含单词tablesorting。
有什么建议吗?感谢
更新
似乎SQL Server框无法使用docx,xlsx等全文搜索。
考虑到Office在2007年切换到这种格式并且我使用的是SQL Server 2008 R2并且新的文档类型甚至没有注册,这似乎令人难以置信。
微软最好!
感谢您的贡献。
答案 0 :(得分:3)
您需要指示SQL Server使用操作系统中安装的文档过滤器。此外,您需要存储文档的类型以及二进制文件,以便FT引擎使用正确的过滤器。看看this MSDN article。