Bu çok karmaşık olabilir, ve ben onlar var eminim, ancak ben herhangi bir iyi 3 parti kütüphaneleri şahsen farkında değilim. Diğerleri olsa da, bazı konserve çözümler önermek mümkün olabilir.
Ben geçmişte sıfırdan benzer bir şey bir kaç kez yazdım. Eğer bu rota aşağı giderseniz, muhtemelen her sorgu tüm kayıtları almak ve onlar üzerinde hesaplamalar gerçekleştirmek içerecektir olarak kendi PHP yapmak istediğimiz bir şey değildir. Neredeyse kesinlikle özelliklerini karşılamak indeks tabloları kümesi oluşturarak içerecektir.
Örneğin, size "Milwaukee" yazıldığından bitebileceğini düşünün nasıl kuralları ile gelmek gerekir "milwakee." Bu benim çözüm (bu aslında arama terimlerini ise emin değil) ünlü sıkıştırma ve çoğaltılması sıkıştırma yapmak oldu. : Yani, Milwaukee olarak endeksli olacaktır
- Milwaukee
- m_lw__k__
- m_lw_k_
Arama sorgusu "Milwaukee" için geldi, ben metin girişi üzerinde aynı işlemi çalıştırın ve sonra için dizin masaya bir arayacaksınız olacaktır:
SELECT cityId,
COUNT(*)
FROM myCityIndexTable
WHERE term IN ('Milwaukee', 'm_lw__k__', 'm_lw_k_')
Arama sorgusu "milwakee" için geldi, ben metin girişi üzerinde aynı işlemi çalıştırın ve sonra için dizin masaya bir arayacaksınız olacaktır:
SELECT cityId,
COUNT(*)
FROM myCityIndexTable
WHERE term IN ('Milwaukee', 'm_lw_k__', 'm_lw_k_')
Milwaukee durumunda (doğru yazıldığından), bu sayımı için "3" dönecekti.
(Sadece ortada bir sesli harf vardı gibi m_lw__k__
desen maç olmaz çünkü) Milwakee (yanlış yazıldığından) durumunda, bu sayımı için "2" dönecekti.
Eğer sayısı dayalı sonuçlarını sıralamak ise, "Milwaukee" daha olası bir eşleşme olarak yüksek Sıralanan sona ereceğini, toplantı senin kurallarından biri sona ereceğini "Milwakee."
Eğer (sorguda $table
kullanımınız ima gibi) genel bir şekilde bu sistemi kurmak istiyorsanız o zaman muhtemelen uygun masaya koşullarınızı haritasına orada bir yerde başka bir eşleme tablosu gerekiyordu.
Ben bu iyi (hatta iyi) bu, ben denemek ve bir üçüncü taraf çözüm olmadan bunu yapmak planlıyorsanız sizin için faydalı olabilir geçmişte yaptık sadece bir şey hakkında gitmek için yoludur demiyorum.