全文未索引 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
我有一个 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