• 13-05-2015, 18:15:09
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba,

    Kendi sitemdeki içerikler için kendi çapımda bir arama motoru geliştirmeye çalışıyorum.

    $(function(){
    		
    		$("#sonuclar").hide();
    		
    		// Tıklandığında işlem yap
    		$(".search_input").keyup(function(){
    		
    			// Veriyi alalım
    			var value = $(this).val();
    			var deger = "value="+value;
    			
    			$.ajax({
    			
    				type: "POST",
    				url: "yolla.php",
    				data: deger,
    				success: function(cevap){
    					if(cevap == "yok"){
    						$("#sonuclar").show().html("");
    						$("#sonuclar").html("Hiç bir sonuç bulunamadı");
    					}else if(cevap=="bos"){
    							$("#sonuclar").hide();
    						} else{
    						$("#sonuclar").show();
    						$("#sonuclar").html(cevap);
    					}
    				}
    				
    			})	
    			
    		});	
    	});
    <?
    if($_POST){
    
    
    include("fonksiyonlar/baglanti.php");
    
    $value = mysql_real_escape_string(strip_tags(rtrim($_POST[value])));
    if(!$value){
    	echo 'bos';
    }else{
    	$find=mysql_query("SELECT *, MATCH (baslik,spot,yazi) AGAINST ('$value*') AS score FROM Yazilar ORDER BY score DESC LIMIT 6");
    	if(mysql_affected_rows()){
    			echo '<li>'.$value.'</li>';
    		while($row=mysql_fetch_assoc($find)){
    			echo '<li>'.$row[baslik].'</li>';
    		
    		}
    		
    		}else{
    			echo 'yok';
    			}
    }
    }else{
    	header("Location: index.php");
    	}
    
    ?>
    şeklinde arama kodum var. ajax ile sonuçlar google gibi yazmaya başladıkça geliyor ama sorun buradan sonra başladı.

    fulltext aramanın benim için daha mantıklı olabileceğini düşündüğümden where like olayına girmedim.

    arama kelimesi yazılmaya başlandığında ilk satır yazılanı taklit etme oluyor. ardından arama sonuçları diziliyor. buraya kadar bir sorun yok.

    örneğin bilet yazdım diyelim

    ilk satır bilet
    ikinci satır içinde "biletleri" kelimesinin geçtiği sonuç
    üçüncü satır yine içinde "biletleri" kelimesinin geçtiği başka bir satır.

    tabi bende bu ikisi ['baslik'] olarak geliyor normal olarak.

    Burada aşmaya çalıştığım konu şu. yine "bilet" ten yola çıkacak olursak arama kutusuna bilet yazıldığında ve karşılık olarak biletleri (biletlerin, biletlerden gibi çoğaltılabilir ve hatta mümünse 2 tane biletleri varsa bunu sadece 1 kere yazması) kelimesini bulduğunda altında [baslik] olarak değil de biletleri olarak sonuç vermesi (tabi bu ajax tarafı için geçerli, post edildiğinde (ara butonu kullanıldığında) arama sonuçları sayfasında satır satır bulunanları çekeriz o sorun değil)

    Umarım anlatabilmişimdir.

    Bu konuda destek verebilecekleri arıyorum
  • 14-05-2015, 09:17:50
    #2
    @oguzhan306,

    SELECT baslik, MATCH (baslik,spot,yazi) AGAINST ('$value*') AS score 
    FROM Yazilar 
    WHERE 1
    GROUP BY score,baslik
    HAVING score > 0
    ORDER BY score DESC LIMIT 6
  • 14-05-2015, 12:14:03
    #3
    sorguyu;

    SELECT * FROM Yazilar WHERE yazi LIKE '$value%' OR baslik LIKE '%$value%' OR spot LIKE '$value%' ORDER BY baslik ASC LIMIT 9
    haline getirdim. ajax da bu kısmen daha iyi sonuç veriyor, sadece arama kelimesi post edildiğinde fulltext aratıyorum.

    bu iş baya komplex bir hal alıyor ve şu an beni aştı

    o yüzden biraz daha geliştirdikten sonra konuya devam edeyim
  • 14-05-2015, 13:01:01
    #4
    hocam eline sağlık
    full text aratınca çok sorgu yer. birileri saldırı amaçlı kullanmasın.

    google cse yapsanız. bir kelime aratınca en üste uygun öneri linki eklenebiliyor. Özel kelimeleri özel konulara bağlayabilirsiniz.
  • 14-05-2015, 13:33:05
    #5
    sağol,

    google cse olabilir ya da açık kaynaklı başka çalışmalar onlarda olabilir ama bu benim biraz hobim gibi oldu. ne ticari bir beklentisi ne de bir trafiği olan bir çalışma. arada kafamı boşaltmak için uğraşıyorum, araştırıyorum, çözüm bulamadığımda burada dile getiriyorum vs vs yoksa dediğiniz gibi üretilebilecek çok fazla alternatif var