全文未索引 varbinary 列(html)

Full Text not indexing varbinary column (with html)

我有一个 table 和 HTML 数据,我想通过 html-filter

使用全文索引进行搜索

所以我创建了一个索引:

CREATE FULLTEXT CATALOG myCatalog AS DEFAULT

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

Body 是具有 HTML 的 varbinary(max) 列。 Filetype 列是计算列 returns .html.

没有返回结果。

我确认安装了 .html 过滤器。全文索引也已正确安装,如果我将列转换为 nvarchar 并仅创建一个 "plain text" 索引(而不是 html), 工作正常 。 =23=]

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

关键字table就是空的!

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

全部returns是"END OF FILE"符号。

它说 "document count 35" 这意味着文档已处理,但没有提取关键字。

PS。我有 SQL Server Express Edition 2012(具有所有高级功能,包括全文)。这可能是原因吗?但同样,"plain" 全文搜索工作得很好!

PPS。请我的同事在 SQL Express 2016 上对此进行测试 - 结果相同...在我们的生产服务器 "Enterprise" 版本上进行了测试 - 相同。

更新

好的,事实证明全文索引不支持 UNICODE!!在 varbinary 列中。当我将列转换为非 unicode 时(通过将其转换为 nvarchar 然后转换为 varchar 然后返回 varbinary)它开始工作。

有人知道解决方法吗?

好的,事实证明全文索引确实支持 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