2009-09-17 8 views
9

MySQL tam metin aramasıyla çalışıyorum ancak dizenin bir alandaki bir sözcüğün parçası olduğu durumlarda bunu eksik buluyorum. Eğer alanım "New York Times" ise ve "Zaman" ı ararsam sonuç alamıyorum. Bu sorunu çözmek için benim tam metin araması ayarlayabilirsiniz herhangi bir yolu var mıMYSQL Tam metin arama ve LIKE

SELECT * FROM ___ WHERE 'string' LIKE %searchterm% 

: Bu çözmek için hackish yolu, iki sorgu kurmak için tam metin araması ve yaptığı diğer yapar biridir Yani ekstra sorguyu çalıştırmak zorunda değilim?

cevap

2

Temel olarak MySql'in tam metin aramasında Sphinx - MySql'in ağ protokolünü uygulayan tam metin arama motorundan vazgeçtim, böylece istemcinizle bir MySql sunucusu arasında hiçbir şey kaybetmeden ve zengin, ciddi tam metin yetenekleri kazanıyor. Belki de sizin ihtiyaçlarınız için uygun değil (ki tam olarak ifade etmiyorsunuz), ama en azından iş çıkışı olduğunu düşünüyorum!

+0

Çok teşekkürler. Sadece sorumu açıklığa kavuşturmak için. New York Giants olan bir alanım var. Bunu tam metin dizinine ekler ve daha sonra "dev" de ararsam hiçbir şey çıkmaz. Bu gibi durumlarda sonuç döndürmek için tam metin aramasını nasıl kullanabilirim? Sphinx'i kontrol edeceğim. Başlıkları –

+0

@Russ için teşekkürler, ** stemming ** plugins (mysql 5.1, 5.0 onları desteklemiyor), örneğin. http://www.mnogosearch.org/doc/msearch-udmstemmer.html. –

+0

Teşekkürler Alex, yardımı takdir ediyorum. Unfortunatley, ellerim bağlı ve mysql 5.1'e yükseltemiyorum. Ama biraz kafam karıştı, anladım ki, 5.0'da, müşteri ayrıştırıcılarını kullanamıyorum, fakat bu, 5.0'da kaynak yapmak için hiçbir yerel mysql yönteminin olmadığı anlamına mı geliyor? –

6

Tam metin aramanızdaki joker kartları kullanabilirsiniz. Daha fazla bilgi here

SELECT * FROM _____ WHERE MATCH (title) AGAINST ('time*' IN BOOLEAN MODE); 
+0

hmmm güzel hoş. Bunu düşünmedim. Tek sorun, "zamanlama" ve bunun gibi kelimelerle eşleşmeyeceği için onun zayıf bir yerine geçmesidir. Hem tam metin araması hem de% LIKE% ... eşleşen bir dize araması yapmayı tercih ettim. Onun biraz sıkıcı ve ekstra sorgulama ama oldukça sağlam sonuçlar üretir. –

+0

Bir aramanın başka yöne gitmesi gerektiğinde de yardımcı olmaz. Örneğin, veriler "ipad" sözcüğünü içerir, ancak kullanıcı "ipad'ler" için arama yapar. Joker bu durumda yardımcı olmaz. – Vincent

+0

@Arnold 'LIKE% ...%', performansınızı öldürecektir, çünkü SQL dizin kullanmaz. Bu yaklaşıma giderseniz, muhtemelen tam metin aramaya ihtiyacınız olmaz. – PeerBr