2010-11-18 60 views
0

我在我的数据库中有一个字段,其中包含一个word文档。这存储在varBinary(max)字段中。SQL全文搜索不索引二进制字段

我使用全文搜索来搜索此字段中的文本。因此,我创建了一个字段'Extension',每个记录在Extension字段中包含'.doc'。我已将更改跟踪设置为自动。

一切正常,直到我创建一个新的记录。当我创建一条新记录并搜索一条仅放入新记录的单词时,FTS将找不到任何内容。但是,当我这样做:

UPDATE table SET Extension = '.doc'

的FTS发现我的新纪录!这怎么可能?我错过了什么?

因此,当我对记录执行更新时,记录会被重新索引?

+1

您是否尝试过给它一些时间?如果索引是在后台完成的,那么在添加记录后可能不会立即可用。 – Guffa 2010-11-18 13:23:12

+0

是的,我已经做到了。但是,当我使用唯一字更新现有记录并搜索此字时,我直接得到结果 – Martijn 2010-11-18 13:32:44

+0

您可以在查询中找到某些给定文本在二进制列中搜索的解释吗? – FlipMcF 2012-01-11 19:30:29

回答

0

对不起,但也许问题是,你不能全文索引二进制/ Varbinary列,所以你可能会得到一些未定义的行为。

从[5.1]手册:

全文索引只能与MyISAM表被使用,并且可以是仅针对CHAR,VARCHAR,或TEXT列创建 。

http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

虽然我没有“尝试”它自己确认并重新创建您的具体情况,其中列索引似乎

1

我有这个确切的问题。看起来是因为在表中已经有数据之后创建了目录并启用了全文,所以全文目录从未更新过原始数据。以下内容用于解决我现有数据的问题,但可能有一个更简单的方法:

ALTER FULLTEXT INDEX ON table SET CHANGE_TRACKING OFF; -- turn auto off 
ALTER FULLTEXT INDEX ON table STOP POPULATION; -- stop anything in progress 
ALTER FULLTEXT INDEX ON table START FULL POPULATION; -- do a full population 
ALTER FULLTEXT INDEX ON table SET CHANGE_TRACKING AUTO; -- auto back on