2010-11-18 17 views
0

Veritabanımda bir kelime belgesi içeren bir alanım var. Bu bir varBinary (max) alanında saklanır.SQL Tam Metin Araması ikili alanı dizine ekleyemiyor

Bu alanda metin aramak için Tam Metin Aramasını kullanırım. Burada bir 'Uzatma' alanı oluşturdum ve her kayıt Uzatma alanında '.doc' içeriyor. Değişiklik izlemeyi otomatik olarak ayarladım.

Yeni bir kayıt oluşturana kadar her şey yolunda gidiyor. Yeni bir kayıt oluşturduğumda ve sadece yeni kayıtta bulunan bir kelimeyi araştırdığımda, FTS hiçbir şey bulamaz. Ama ne zaman bu:

UPDATE table SET Extension = '.doc'

FTS benim yeni rekor bulur! Bu nasıl mümkün olabilir? Neyi kaçırıyorum?

Kayıtlarda bir güncelleştirme gerçekleştirdiğimde, kayıtlar yeniden endekslenir?

+1

Sadece biraz zaman vermeye çalıştınız mı? İndeksleme arka planda yapılırsa, kayıt eklendikten hemen sonra kullanılamayabilir. – Guffa

+0

Evet, bunu yaptım. Ancak, mevcut bir kaydı benzersiz bir sözcükle güncelleştirdiğimde ve bu sözcüğü aradığımda, doğrudan sonuç alabiliyorum – Martijn

+0

Belirli bir metin için ikili sütunu araştıran sorgu (lar) üzerine bir EXPLAIN gönderebilir misiniz? – FlipMcF

cevap

0

Üzgünüz, ama belki sorun olduğunu ayıramayacağınızı tam metin dizini ikili/Varbinary sütunu, muhtemelen bazı tanımsız davranış alıyorsanız bu yüzden. [5.1] kılavuzda itibaren

:

Tam metin indeksleri sadece MyISAM tabloları ile kullanılabilir ve sadece CHAR, VARCHAR veya METİN sütunları için oluşturulan olabilir.

ben onaylamak ve sütun bu kesin sorun vardı
1

endeksli görünüyor kesin durum, yeniden oluşturun kendim 'çalıştı' olmasına rağmen

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

. Kataloğun oluşturulduğundan ve tablodaki verilerden sonra tam metin etkin olduğundan, tam metin kataloğunun orijinal veriler için hiç güncellenmediğinden dolayı görünüyor. Aşağıdakiler varolan verilerim için sorunu çözmeyi sağladı, ancak muhtemelen daha basit bir yöntem vardır:

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 
İlgili konular