2011-07-14 25 views
10

tam metin dizini ile yavaş yavaş. Maçı kullanmanın bir seçeneği olduğunu anladım. Fark ne? Nasıl? Kullanımım için en iyi yaklaşım nedir? Böyle bir şey kullanarak sona erdi ettik: Ben değiştirmek istiyorum SELECT
*, MATCH (name) AGAINST ('a*' IN BOOLEAN MODE) AS SCORE
FROM
users WHERE
MATCH (name) AGAINST ('a*' IN BOOLEAN MODE)
ORDER BY SCORE, popularity DESC LIMIT 4
MySQL böyle sorguya GİBİ basit mysql kullanıyorum

bir şey olduğunu "aaa"

GÜNCELLEME ile başlar her şey için "%" kullanıyorum Bildirimi önce SCORE ve daha sonra benim alan popülerliğim tarafından sipariş değil ve yerine basit bir ağırlık fonksiyonu ile sipariş, 0.5 * SCORE + 0.5 * gibi bir şey. Nasıl? Tam metin dizinini kullanmaz.

cevap

10

LIKE tam metin dizini kullanmaz. tam dizin faydalanmak için, (dediğin gibi) maç kullanmak zorunda:

SELECT * 
FROM myTable 
WHERE MATCH(field) AGAINST ('aaa*' IN BOOLEAN MODE) 
ORDER BY field2 

MySQL ManualFull-Text Search Functions üzerinde kapsamlı Bölüm sahiptir.

+0

İlginç .. DB2 veya sybase için herhangi bir eşdeğer sorgu var mı? Google çok fazla yardım etmiyor. – user606723

+0

@ user606723 bu makaleye bir göz atın: [DB2 Metin Araması ile tam metin arama] (http://www.ibm.com/developerworks/data/tutorials/dm-0810shettar/index.html) – Jacob

+0

Güncelleştirmeler "siparişi" ile yaptığım sorguyu. Bunu nasıl ekleyebilirim? – Noam