我有一个包含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'))
它返回的只是“文件结束”符号。
显示“文档数35”,表示已处理文档,但未提取关键字。
PS。我有SQL Server Express 版(具有所有高级功能,包括全文)。这可能是原因吗?但同样,“纯文本”全文搜索可以正常工作!
PPS。让我的同事在SQL Express 2016上进行测试-相同的结果...在我们的生产服务器“ Enterprise”版本上尝试过-相同。
确定,全文索引不支持UNICODE!在varbinary列中。当我将列转换为非unicode时(通过将其转换为nvarchar
然后转换为varchar
然后再转换为varbinary
),它开始起作用。
有人知道任何解决方法吗?
答案 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