代码之家  ›  专栏  ›  技术社区  ›  Alex from Jitbit

全文不索引varbinary列(带HTML)

  •  3
  • Alex from Jitbit  · 技术社区  · 6 年前

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

    所以我创建了一个索引:

    create fulltext catalog mycatalog as default
    
    在MyTable上创建全文索引(正文类型列文件类型)
    密钥索引pk_mytable
    < /代码> 
    
    

    bodyis avarbinary(max)column with html.filetypecolumn is a computed column returns.html

    没有返回任何结果。

    我验证是否安装了.html->filter。全文索引也已正确安装,如果我将列转换为nvarchar,则可以正常工作,并且只创建一个“纯文本”索引(而不是HTML)。

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

    关键字表只是空的!

    选择*
    来自sys.dm_ts_index_关键字
    (数据库ID(“MyDatabase”),对象ID(“MyTable”))
    < /代码> 
    
    

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

    上面写着“文档数35”,这意味着文档已被处理,但没有提取关键字。

    ps.我有SQL ServerExpress2012版(所有高级功能包括全文)。这就是原因吗?但是,同样,“纯”全文搜索工作只是很好!

    PP>PPS。让我的同事在SQL Express 2016上测试这个-同样的结果…在我们的生产服务器“Enterprise”版本上尝试过-相同。

    < H2>更新< /H2>

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

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

    Body是一个varbinary(max)带HTML的列。这个Filetype列是计算列返回值.html.

    没有返回任何结果。

    我证实了HTML过滤器已安装。全文索引也已正确安装,并且工程罚款如果我将列转换为nvarchar只创建一个“纯文本”索引(而不是HTML)。

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

    关键字表只是空的!

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

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

    enter image description here

    它说“文档数35”,这意味着文档被处理,但没有提取关键字。

    我有SQL服务器快递2012版(具有所有高级功能,包括全文)。这就是原因吗?但是,同样,“纯”全文搜索工作只是很好!

    PPS。让我的同事在SQL Express 2016上测试这个-同样的结果…在我们的生产服务器“企业版”上尝试过-相同。

    更新

    好吧,原来全文索引不支持Unicode!!在varbinary列中。当我将列转换为非Unicode时(通过将其转换为纳瓦卡尔然后到varchar然后回到varbinary)它开始工作了。

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   Alex from Jitbit    6 年前

    好的,结果是全文索引支持 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