2010-11-18 4 views
0

У меня есть поле в моей базе данных, которое содержит документ слова. Это сохраняется в поле varBinary (max).SQL Full Text Search не индексирует двоичное поле

Я использую полнотекстовый поиск для поиска текста в этом поле. Поэтому я создал поле «Расширение», и каждая запись содержит «.doc» в поле «Расширение». Я установил отслеживание изменений в автоматический.

Все работает нормально, пока я не создаю новую запись. Когда я создаю новую запись, и я ищу слово, которое было помещено только в новую запись, FTS ничего не находит. Но, когда я делаю это:

UPDATE table SET Extension = '.doc'

ФСТ находит свой новый рекорд! Как это возможно? Что мне не хватает?

Итак, когда я выполняю обновление записей, записи переиндексируются?

+1

Вы пытались просто дать ему некоторое время? Если индексирование выполняется в фоновом режиме, оно может быть недоступно сразу после добавления записи. – Guffa

+0

Да, я сделал это. Но когда я обновляю существующую запись с уникальным словом, и я ищу это слово, я получаю непосредственно результаты – Martijn

+0

Не могли бы вы разместить EXPLAIN в запросе (-ях), который ищет двоичный столбец для некоторого заданного текста? – FlipMcF

ответ

0

Извините, но, возможно, проблема в том, что полный текстовый индекс не может содержать двоичный/варбинарный столбцы, поэтому вы можете получить некоторое неопределенное поведение.

С [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