Arkadaşlar Merhabalar , Bir Arama SAyfası Yapmaya Çalışıyorum ve Şöyle Bir Sorunum Oluştu , Aranılan Kelimeyi yada Cümlenin Sonucu Alaka Düzeyine Göre Sıralama Ve Alakalı Olan Sonuçları Gösterme Örnek Olarak ;
Ev Aramasını Yapınca Kereviz Arama Sonucu Çıkıyor ve İd ye Göre Sıraladığımız İçin en başta olabiliyor Bu Sorunu Nasıl Çözebilirim ?
Nette Araştırdığıma Göre Sort By Relevance Diye Bir Metod Buldum Ama Doğru Düzgün Türkçe Kaynak Yok , Hatta Hiç Yok , Bu Metod Hakkında Herhangi Bir Örnek Verebilirmisiniz ? Yada Nasıl Yapmam Nasıl bir Yol İzlemem Konusunda Yardımcı Olabilirmisiniz ?
Şimdiden Teşekkür Ederim .
Yardım : Php search sort by relevance yapımı
6
●356
- 27-04-2015, 19:16:44Full text search kullanmanız gerekiyor hocam aşağıda bir örnek hazırladım, sizin bahseetiğiniz Relevance olayı tam olarak budur score = Relevance
$aranan1 = "ara";//sadece ara ile eşleşir $aranan2 = "ara*";//arama, araba, arada vs ilr eşleşir // birden fazla alanda arama yapıyorsanız başlık en önemlisidir heralde herhangi eşleşmeye 0,4 puan verilebilir // içerikte yakın benzerliğe 0,2 // yine içerikte tam benzeşmeye 0,4 puan vererek sağlıklı sıralamalar alınabilir select blog.*, (((MATCH (blogBaslik) AGAINST ('$aranan1' IN BOOLEAN MODE)) * 0.4) + ((MATCH (blogIcerik) AGAINST ('$aranan1' IN BOOLEAN MODE)) * 0.2) + ((MATCH (blogIcerik) AGAINST ('$aranan2' IN BOOLEAN MODE)) * 0.4)) AS score from blog where MATCH (blogBaslik, blogIcerik) AGAINST ('$aranan1' IN BOOLEAN MODE) order by score desc - 27-04-2015, 21:00:52Sıralamayı "order by score desc" şeklinde yapacaksınız "from" öncesinde bize zaten benzeşim oranlarını veriyor biz benzeşim oranlarını, ondalık sayılarla çarparak stuna göre öncelik atıyoruz. Başlıkta bulunan kelime içerikte bulunandan daha değerlidir, "kaz" kelimesi aranırken "kaz", "kazanmak" kelimesinden daha değerlidir.
$aranan1 = "ara";//sadece ara ile eşleşir
$aranan2 = "ara*";//arama, araba, arada vs ile eşleşir
bu iki değişkeni arama formundan gelen kelimeleri parçalayıp yeniden şekillendirerek oluşturmanız gerekiyor. - 27-04-2015, 22:37:55Tamamdır birazdan başlıyorum bakalım yapabilecekmiyim , gözümde biraz büyüttüm sanırım
--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 22:37:55 -->-> Daha önceki mesaj 21:03:30 --
Aşağıdaki Şekilde Yazılan Kelimeyi Bölüp arama yaptırıyorum ala like ile yani get ile çektiğim için senin verdiğin şekilde yaptığımda hata ile karşılaşıyorum bunu nasıl ekleyebilirim peki
if (@$haberid = $_GET["id"]) { $kelimeler = explode(" ", $ilanid); $s_array = array(); foreach ($kelimeler as $key => $value) { $aranan1 = "%$value%"; $aranan2 = "%$value%*"; $query_Recordset1="SELECT.*, haber left join resimler on (resimler.id = haber.id) (((MATCH (haber.aciklama) AGAINST ('$aranan1' IN BOOLEAN MODE)) * 0.4) + ((MATCH (haber.tipi) AGAINST ('$aranan1' IN BOOLEAN MODE)) * 0.2) + ((MATCH (haber.durum) AGAINST ('$aranan2' IN BOOLEAN MODE)) * 0.4))+ ((MATCH (haber.baslik) AGAINST ('$aranan2' IN BOOLEAN MODE)) * 0.4))+ ((MATCH (haber.id) AGAINST ('$aranan2' IN BOOLEAN MODE)) * 0.4)) AS score from haber where MATCH (haber.aciklama, haber.tipi,haber.durum,haber.baslik,haber.id) AGAINST ('$aranan1' IN BOOLEAN MODE) order by score desc"; } $where_str = implode(" or ", $s_array); $sql_str = "select * from haber where $where_str"; $sql = mysql_query($sql);