全文不索引varbinary列(带有html)

时间:2018-07-27 10:01:52

标签: sql-server full-text-search

我有一个包含HTML数据的表,我想通过html过滤器使用全文索引进行搜索

所以我创建了一个索引:

CREATE FULLTEXT CATALOG myCatalog AS DEFAULT

CREATE FULLTEXT INDEX ON myTable (Body TYPE COLUMN Filetype)
                        KEY INDEX PK_myTable

Body是带有HTML的varbinary(max)列。 Filetype列是返回.html的计算列。

没有结果返回。

我确认已安装.html过滤器。如果将列转换为nvarchar并仅创建“纯文本”索引(而不是html),则FullText索引也已正确安装,并且工作正常

SQL日志或FTS日志中没有错误。

关键字表为空!

SELECT *
FROM sys.dm_fts_index_keywords
(DB_ID('myDatabase'), OBJECT_ID('myTable'))

它返回的只是“文件结束”符号。

enter image description here

显示“文档数35”,表示已处理文档,但未提取关键字。

PS。我有SQL Server Express 版(具有所有高级功能,包括全文)。这可能是原因吗?但同样,“纯文本”全文搜索可以正常工作!

PPS。让我的同事在SQL Express 2016上进行测试-相同的结果...在我们的生产服务器“ Enterprise”版本上尝试过-相同。

更新

确定,全文索引不支持UNICODE!在varbinary列中。当我将列转换为非unicode时(通过将其转换为nvarchar然后转换为varchar然后再转换为varbinary),它开始起作用。

有人知道任何解决方法吗?

1 个答案:

答案 0 :(得分:3)

好的,因此事实证明全文索引确实支持varbinary中的unicode数据,但请注意以下事项:

如果您的varbinary列是根据Nvarchar创建的,请确保在开头添加0xFFFE unicode签名

例如,我将计算列用于全文索引,因此必须将计算列更改为:

alter table myTable
add FTS_Body as 0xFFFE + (CAST(HtmlBody as VARBINARY(MAX)))
--HtmlBody is my nvarchar column that contains html