【问题标题】:Full Text not indexing varbinary column (with html)全文未索引 varbinary 列(使用 html)
【发布时间】:2019-01-04 10:27:32
【问题描述】:

我有一个包含 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),全文索引也已正确安装并且 工作正常

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

关键字表只是空的!

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

它返回的只是“END OF FILE”符号。

上面写着“document count 35”,表示文档已处理,但没有提取关键字。

附言。我有 SQL Server Express 2012 版(具有所有高级功能,包括全文)。这可能是原因吗?但同样,“纯”全文搜索工作得很好!

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

更新

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

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

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案1】:

    好的,所以全文索引确实支持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
    

    【讨论】:

    • 非常感谢您提出这个问题!它解释了为什么我没有从全文索引中得到任何信息。
    • 我不知道你是怎么想出来的,但它绝对有效。应该在官方文档中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多