2013-10-24 23 views
6

Mediawiki'de, sayfa içeriğini içeren 'metin' veritabanında bir tablo vardır. Bir [BLOB] dosyası olarak kaydedilir. Belirli sayfaların belirli bir 'string' içerdiğini görmek için sitedeki tüm metinleri aramak için bir sorgu çalıştırmak istiyorum. [blob] dosyalarını aramak için nasıl bir sorgu çalıştırabilirim?Blob dosyalarında bir dize bulmak için bir sorgu nasıl çalıştırılır?

+0

Doğru hatırlıyorsam, MediaWiki 'text' tablonun içeriğini sıkıştırabilir. Durumunun bu olmadığından emin misin? – svick

+0

Belgede, 'old_flags' sütununun bir gzip dosyası içerebileceğini, ancak aynı zamanda bir blob dosyası olduğunu ve indirdiğimde gzip dosyasını göremediğimi söylüyor. Tüm içeriğe rağmen arama yapmak istediğim wiki'mde çok miktarda içerik var, her sayfayı indiremiyorum ve çözemiyorum. Bunun nasıl yapılacağı hakkında bir fikrin var mı? – LTech

cevap

6

Mediawiki işaretleme metni, mediumblob türünde olan old_text alanında depolanır. Diğer metin tabanlı alanlar gibi sorgulayabilirsiniz. MySQL, dizininizi sorgu için ikili haline getirecektir. Bu, büyük-hassas bir arama olduğunu unutmayın! Eğer küçük harf duyarsız gerekiyorsa

select old_id from text where old_text like "%string%"; 

sonra sütuna bir harf duyarsız harmanlama uygun character set uygulamak gerekir:

SELECT old_id from text where CONVERT(old_text USING latin1) like '%STRing%'; 

unutmayın o masa küçük değil bu sorgular ise uzun zaman alacak.

0

mediawiki documentation Metin Tablosuna göre, yalnızca revizyon metnini saklar. Bu nedenle, tam metne erişmek için, bir sayfaya karşılık gelen tüm revizyonların işlenmesi gerekir. Bir API çağrısı mediawiki search engine kullanmak ve sonuçları SQL sorgusu kullanarak aramaktan daha iyidir.

İlgili konular