MySQL tam metin araması

Bugün yavaş bir en iyi duruma getirmek için oynadı SQL istek türü

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Zahmetli bir dakika burada nerede – son bölümü kelime % ‘ %’ ve büyük concreteness karakterler bile % kelimeyi daha önce, Biz bunu. Joker karakter simgesi % ,daha önce herhangi bir değer, bizim uygulama doğrudan doğrudan bir yavaş çevirir, Bu şekilde uygulama bize dizinleri kullanmak durur çünkü. Her zaman olduğu gibi orada çözümler, Ama her zaman açık 😆 genellikle değildir MySQL Bu sorun için bir çözüm var fulltext arama Bir dizin oluşturma. Nasıl orada alan değişimdir çok belgelerinde yazılı, Ama acele nasıl en iyi isteği değiştirin anlatacağım, Çünkü biz-ecek almak biraz drama sonunda. Fulltext alan için geçerli olarak bir şirin makyaj, Sorgu şeklinde değiştirilmesi gerekiyor:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Yani yapısı açıktır ve gereksiz tartışma gerek yok. Yukarıdaki sorgu yürürlüğe girecek, Eğer kelime, kendisi için en az bir istek yapıyoruz 4 sembolü, Bu varsayılan değerdir, Bu değişiklik yapmak istiyorsanız, değeri belirtmeniz gerekir, istediğiniz benim. cnf bölümünde [mysqld] Bildirimin önüne ft_min_word_len= 3 veya 2, 1 iyi bir seçim değil belli ki 😉 . Sonra sen değişmek belgili tanımlık değer ve mysql server-tabloların bir onarım yapmak gerek yeniden başlatın, Yeni dizin oluşturma için sırayla yürürlüğe girer. Burada her şey açık: değişir mi, I araştırma, rebildvam endeksi ve yapmak benim istek ve döner 0 Çizgi 😀 ile kontrol

SHOW VARIABLES

Görüyorum ki değerleri, Yürürlüğe girdi sordum, rebildvam dizinler yeniden – aynı sonuç. 🙄 Nefret, çok rahatsız. Buradan büyük bir küfür ve oldukça olduğu ortaya çıktı döken 😀 anahtarı için tırmalamak başladı, oldukça ilginç. Bir bütün olarak, zaman belgelerine okumaya başladı ve bir ilginç pasaj için geldi

Böyle bir tekniği en iyi büyük koleksiyonları ile çalışır (Aslında, dikkatle bu şekilde ayarlanmıştı). Çok küçük tablolar için, Word dağıtım yeterince anlamsal değerlerine yansıtmak zorunda değildir, ve bu model bazen tuhaf sonuçlara neden olabilir. Örneğin, kelime "MySQL" daha önce gösterilen makaleler tablo her satırda mevcut olsa da, kelime için bir arama sonuç üretir

IŞIN 😳 vermek benim tepsi küçük – Bu hala bir testti. Bir büyük uygulama Naših tablo ile üzerinde 2 000 000 sipariş ve orada şeyler uyuyor musun. De bu vardır zaten açık sorunu. Çözüm açıkça yapmak, Kısaca bahsedilecek, Bu tam metin arama desteği 3 Gelişmiş modu BOOLE DEĞERİ , İFADELER ve DOĞAL DİL Varsayılan olarak çalışıyor son. Farklı modları hakkında belgelere bakın, İle açıklayacağım 2-3 Boole değeri olarak çünkü anahtar kelimeler. Türü mantıksal işleçleri destekler ve, OR , Ve benzeri ve biraz sihir arama ifadeler ile yapabilirsiniz, için bir, başka vb vardır.. Destekler ve sembolü *, Joker karakterler eşdeğerdir % 😉 Çok faydalı olduğunu, Arama terimi uzunluğu, ne zaman ft_min_word_len ya da küçük tepsileri ;). En azından bana masasında görmek hakkında 100 Yolun mükemmel bir iş yapıyor. Kalan tek şey görmek ve bitmiş uygulama:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Şimdi burada işleri bizimle joker karakterleri dizin oluşturma bir an gelir – Cevabı bilmiyorum.. Ben prensip olarak düşünüyorum, olarak için, belgelerde belirtilen çünkü, Ancak belgelerinde Görünüşe göre demek veya şeyler 😀 bir sürü göster

Zemanta tarafından geliştirilmiş

2 Yorumlar

    1. İçinde var zaten diğer çözümleri 😉 bölümleri demek tablolarıdır, ya da fulltext arama için diğer mehanizmni gibi bir Sfenks büyüktür

Cevap bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar işaretlendi *

Anti SPAM *