2012-09-07 23 views
6

Tek bir alıntı ve bir yıldız işareti joker, yani "levi's *" ile bir dize kullanarak boole modunda tam metin arama yapmaya çalıştığınızda bir sorun yaşıyorum: arama gibi görünüyor ayrıca "s" ile başlayan tüm kelimeler için, "spears" gibi, bildiğim kadarıyla, tek kelimelerin ('') bir kelime ayırıcısı olabileceği halde, alıntı kelimenin bir parçası olarak düşünülmelidir. Hatalıyım.Tek bir alıntı ile tam metin sorgusu

, burada örneği inceleyelim: Lütfen http://www.sqlfiddle.com/#!2/3dd3e/2/0 - İkinci sıra nasıl İstediğimi yapabilirim orada

should't? MATCH(value) AGAINST ('"levi\'s"* lacost*' IN BOOLEAN MODE)

cevap

1

bu size örnekten iki satır verir:

SELECT * 
FROM ft 
WHERE MATCH(value) AGAINST ('"levi\'s" lacost*' IN BOOLEAN MODE) 

+0

sorun, bu sorguların hiçbiri yani 'levi'strauss' bulacağını olmasıdır çift ​​tırnak sonra bir şey yapmak için görünmüyor ("lacost" * işe yaramadı) – Borgtex

+0

"Ben hiç MATCH()' kullanmadım demek zorundayım. Onun yerine normal bir ifade kullanıyorum. –

+1

parantez kullanarak daha iyi yardımcı oluyor gibi görünüyor .... (bkz. güncelleştirilmiş yanıt) –

1

Sana bunu tek tırnak

Örn içeriyorsa aramak gerekir dize alıntı katına sanırım Sonunda http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html'da çift tırnaktaki kesin eşleşmeler hakkında konuşuyor. Sonra tek tekliften kaçarsın ve işin bitti. parantez kullanma

, yıldız ekleyebilirsiniz:

WHERE MATCH(value) AGAINST ('(levi\'s)* lacost*' IN BOOLEAN MODE) 
0

Piggy tek tırnak ele Bart'ın yorumum yedekleme ve hala gibi gibi arama fonksiyonu var, ben ayrı ayrı her dönem tedavi. Yani mantık - bir terimin tek bir alıntı varsa, parantez ile sarın, aksi halde bırakın. İşte benim maç BOOLE MODDA ('$ terimi' KARŞI olduğunu

$term = preg_replace("/[']/", "\'", $term); 
$terms = explode(' ',$term); 
foreach ($terms as &$t) { 
    if (strpos($t, "'")) { 
     $t = "(".$t.")"; 
    } 
} 
$term = implode(' ',$terms); 

yardımcı olabilecek bazı php kodu

İlgili konular