Bunu mu demek istediniz? Google Bunu Nasil Yapiyor

Hepimiz Google’da arama yaptigimiz zaman "bunu mu demek istemistiniz" ifadesi ile karsilasmisizdir. Hatta bazilarimiz bu google ne ukala bile demistir. Bugün bizde arama sayfamiza bu özelligi nasil ekleyecegimizi ögrenecegiz. Tabiki google bunu yaparken bizden çok daha farkli yapiyor olacak, biz bu islemi sql server veritabani üzerinden yapacagiz. Bunu yapmadan önce ise t-sql de DIFFERENCE ve SOUNDEX fonksiyonlarinin kullanimina deginmemiz gerekiyor. 

SOUNDEX Fonksiyonu:

SOUNDEX fonksiyonu  parametre olarak bir metin alir ve bu metnin okunusunu ifade eden 4 karakterli bir deger döndürür. Geriye döndürdügü 4 karakterli degerin ilk karakteri aradigimiz kelimenin ilk harfidir.

select SOUNDEX(‘yazilimmutfagi’)  –ifadesi sonuç olarak bize Y245 degerini döndürür.

 

select SOUNDEX(‘yazilimmutfagi’),SOUNDEX(‘yazilimutfagi’)


seklinde aradaki m lerden birini silersek sonuç olarak iki ifade içinde  ifadesi döner. Yani iki ifade de sql bize ayni kelimeden bahsettigimizi söylüyor. Sonuç olarak soundex fonksiyonunu kullanarak kelimeleri karsilastirip ayni olup olmadigini bulabiliriz.

DIFFERENCE Fonksiyonu :

DIFFERENCE fonksiyonu iki adet parametre alir ve aldigi parametreleri SOUNDEX fonksiyonuna tabi tutarak dönen 4 karakterli sonuçlari karsilastirir. Dönen 4 karakterli sonuçlarin kaç karakterinin ayni oldugunu ifade eden 0 ile 4 arasinda bir sonuç döndürür.

select DIFFERENCE(‘metin1’,‘metin2’)


simdi ahmet ve akmet kelimelerini ilk olarak soundex fonksiyonuna gönderelim ve dönen sonuçlari inceleyelim.

select SOUNDEX(‘ahmet’)   — Sonuç : A530

 

select SOUNDEX(‘akmet’)   — Sonuç :  A253


Sonuçlari inceleyecek olursak dönen degerlerin 3 karakteri ayni. Bunlar ‘A’,’5′ ve ‘3’ farkli olan ise ‘0’ ve ‘2’. Simdi iki kelimeyi Difference fonksiyonuna tabi tutalim
.

select DIFFERENCE(‘ahmet’,‘akmet’) — Sonuç :  3

 

Kisacasi DIFFERENCE degeri bize parametre olarak aldigi iki ifadenin ne kadar benzer oldugunu gösteriyor.

SOUNDEX ve DIFFERENCE fonksiyonlarini ögrendigimize göre simdi Difference fonksiyonunu kullanarak google tarzi aranan kelime tavsiye eden basit bir arama sayfasi yapalim

 

Ilk olarak kullanacagimiz örnek veritabanini olusturalim. Kullanacagimiz tabloya ait create script ve verileri asagidaki gibi olacak.

CREATE Table Siteler

(

      [ID] [int] NULL,

      [SiteAdi] [varchar](100) NULL,

      [Aciklama] [varchar](200) NULL

)

 

ID

SiteAdi

Aciklama

1

yazilimmutafagi

Programlama konudlari hakkinda güncel makaleler bulunan bir site

2

google

Internet kullanmayi kullanisli ve zevkli hale getiren arama motoru

3

bing

Microsoft tarafindan google’a karsi rakip olarak çikarilan arama motoru

4

microsoft

Microsoft sirketine ait resmi web sitesi. Site üzerinden msdn kütüphanesinede erisebilirsiniz

 

Simdi sirada bu tablo üzerinden arama yapacagimiz bir web sayfasi yapmak. Bunun için visual studio içinde yeni bir websitesi olusturup sayfamiza asagidaki html kodlarini ekliyoruz.

<div>

        <asp:TextBox ID="ArananKelimeTextBox" runat="server"></asp:TextBox>

        <asp:Button ID="AraButton" runat="server" Text="Arama"

            onclick="AraButton_Click" />

        <p>

            <asp:Label ID="TavsiyeEdilenLabel" Visible="false" runat="server" Text=""></asp:Label></p>

        <asp:GridView ID="SonuclarGridView" runat="server">

        </asp:GridView>

</div>

 

Ardinda arama butonuna basinca çalisacak kodlari yazalim. Ilk olarak arama yapilinca eger bir sonuç dönerse direk olarak sonuçlari gridde gösterecegiz. Eger arama sonrasi herhangi bir sonuç dönmezse difference fonksiyonu ile arama yaparak benzer kelimeyi gösterecegiz. Bunu için asagidaki iki metodu yazalim ve bunlari Arama butonuna basilinca asagidaki gibi çagiralim.

protected void AraButton_Click(object sender, EventArgs e)

{

    int sonucsayisi = AramaYap(ArananKelimeTextBox.Text);

    if (sonucsayisi == 0)

    {

        BenzeriniBul(ArananKelimeTextBox.Text);

        TavsiyeEdilenLabel.Visible = true;

    }

}

 

string conString = "Data Source=.;Initial Catalog=DemoDB;Integrated Security= true";

private void BenzeriniBul(string p)

{

    string sql = "select top 1 SiteAdi from Siteler where DIFFERENCE(SiteAdi,’" + p + "’) > = 3";

    SqlCommand command = new SqlCommand(sql, new SqlConnection(conString));

    command.Connection.Open();

    string tavsiyeEdilenKelime = command.ExecuteScalar().ToString();

    if (!String.IsNullOrEmpty(tavsiyeEdilenKelime))

    {

        TavsiyeEdilenLabel.Text = "Bunumu Demek istemistiniz <strong>" + tavsiyeEdilenKelime + "<strong/>";

    }

    else

    {

        TavsiyeEdilenLabel.Text = "Her hangi bir sonuç bulunamadi";

    }

}

 

private int AramaYap(string p)

{

    string sql = "select * from Siteler where SiteAdi LIKE ‘%" + p + "%’";

    SqlDataAdapter da = new SqlDataAdapter(sql, conString);

    da.SelectCommand.Connection.Open();

    da.SelectCommand.ExecuteNonQuery();

    DataTable dt = new DataTable();

    da.Fill(dt);

    SonuclarGridView.DataSource = dt;

    SonuclarGridView.DataBind();

    return dt.Rows.Count;

}

 

Olusturdugumuz sayfada ‘google’ kelimesini aradigimizda asagidaki gibi bir sonuç bulur

‘Google’ kelimesinin aksine veritabanimizda bulunmayan ‘doogle’ kelimesini ararsak herhangi bir sonuç dönmeyecegi için bize tavsyede bulunur.
.

Umarim anlattiklarimiz isinize yarayacaktir.

Örnek Projeyi buradan indirebilirsiniz.

 

Tags:

5 thoughts on “Bunu mu demek istediniz? Google Bunu Nasil Yapiyor

  • @ahmet   demek istedigine katilmiyorum  bir web sitesini aradiginda eger Bunu mu demek istediniz?  gibi bir ifade çikiyorsa bu su demek oluyor  alan adin çok yeni tam olarak google ‘a kayitlanmamis yada arama sorgulari çok düsük biraz tarafik alirsan web sitenin adinda bu durum düzelecektir.  

  • google da cikmak için sitene bir sitemap olustur, google webmaster a giris yapip sitemap lerini ekle. bu islemler ucretsizdir. Google da cikmak için para vermene gerek yok. google ne zaman isterse o zaman cikarsin 🙂

    ayrica baska sitelerden kendi sitene link alarak daha hizli sonuc alabilirsin.

    aramalarda sitenin altinda cikan diger baglantilarda tamamen googleun karari. google webmasterda baglantilar kismini tiklarsan orada yazar.

  •  görünmemiz için orayami kaydolmamiz lazim bilmiyorum. birsey daha soracagim bazi siteleri arattigimizda sitenin isminin alttarafinda menüsüde çikiyor örngin sahibinden.com yazdigimizda google aramasinda alttarafinda vasita emlak satilik kiralik gibi bir menü olusuyor kimse bunu paylasmamis ama çok istegimiz bir özellik. çok soru sorup kafa sisirdim galiba ama okuyan olursa paylasimlari için simdiden tesekkürler. bilmeyenlerde yorum yapmasinlar.

  • mrb. ben su sekilde algiladim kendi sitemizde bir arama yapacaksak dogrusunu bulacak. ama benim istedigim daha farkli birsey. googleda websitemin adini yazdigimda nasil yazarsam yazayim. istersen http den basla tümünü yaz websitem . info ile bitiyor ve google bana bunumu demek istediniz diye .com la biten siteyi öneriyor. buda çok kötü birsey bunun popülerlikle alakali oldugunu sanmiyorum çünkü çok sikayetçi var bu konuda. arama motoruna zaten kayitliyiz. farkli bir kayitmi yaptirmamiz gerekiyor anlamadim.özel arama motruna kayit vardi googlda öyle saniyorum kayit yapacagimiz kelimeleri kaydediyor ve ön siralarda çikacagini yaziyor ama sözlesme kabul etmeni istiyor. sözlesmede ise google istegi sekilde reklamlari koyp kendisi faydalanacakmis.istersende ücretli kayit yapiyorsun 100 dolara o zaman reklam koymuyor sitene. bunumu demek istediniz de görünmemiz iç

  • süper anlatim, tesekkür ederim. 

Guests için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir