Merhaba arkadaşlar. Yeni bir makeleyle karşınızdayım. Hepimiz Google’da arama yaptığımız zaman “bunu mu demek istemiştiniz” ifadesi ile karşılaşmışızdır. Hatta bazılarımız bu google ne ukala bile demiştir. Bugün bizde arama sayfamıza bu özelliği nasıl ekleyeceğimizi öğreneceğiz. Tabiki google bunu yaparken bizden çok daha farklı yapıyor olacak, biz bu işlemi sql server veritabanı üzerinden yapacağız. Bunu yapmadan önce ise t-sql de DIFFERENCE ve SOUNDEX fonksiyonlarının kullanımına değinmemiz gerekiyor.
SOUNDEX Fonksiyonu:
SOUNDEX fonksiyonu parametre olarak bir metin alır ve bu metnin okunuşunu ifade eden 4 karakterli bir değer döndürür. Geriye döndürdüğü 4 karakterli değerin ilk karakteri aradığımız kelimenin ilk harfidir.
select SOUNDEX('nanoyazilim') --ifadesi sonuç olarak bize N245 değerini döndürür.
DIFFERENCE Fonksiyonu :DIFFERENCE fonksiyonu iki adet parametre alır ve aldığı parametreleri SOUNDEX fonksiyonuna tabi tutarak dönen 4 karakterli sonuçları karşılaştırır. Dönen 4 karakterli sonuçların kaç karakterinin aynı olduğunu ifade eden 0 ile 4 arasında bir sonuç döndürür.
select SOUNDEX('ahmet') -- Sonuç : A530
select SOUNDEX('akmet') -- Sonuç : A253
select DIFFERENCE('ahmet','akmet') -- Sonuç : 3
Sonuçları inceleyecek olursak dönen değerlerin 3 karakteri aynı.
Bunlar ‘A’,’5′ ve ’3′ farklı olan ise ’0′ ve ’2′. Ve iki kelimeyi
Difference fonksiyonuna tabi tuttuk.Kısacası DIFFERENCE değeri bize
parametre olarak aldığı iki ifadenin ne kadar benzer olduğunu
gösteriyor.SOUNDEX ve DIFFERENCE fonksiyonlarını öğrendiğimize göre şimdi Difference fonksiyonunu kullanarak google tarzı aranan kelime tavsiye eden basit bir arama sayfası yapalım
İlk olarak kullanacağımız örnek veritabanını oluşturalım. Kullanacağımız tabloya ait create script ve verileri aşağıdaki gibi olacak.


Tablomuzu oluşturup içine verilerinmizi girdikten sonra, arama yapılınca eğer bir sonuç dönerse direk olarak sonuçları gridde göstereceğim. Eğer arama sonrası herhangi bir sonuç dönmezse difference fonksiyonu ile arama yaparak benzer kelimeyi göstereceğim. Bunu için aşağıdaki iki metodu yazalım ve bunları Arama butonuna basılınca aşağıdaki gibi çağıralım.
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 istemiştiniz <strong><strong>" + tavsiyeEdilenKelime + "<strong></strong>";
}
else
{
TavsiyeEdilenLabel.Text = "Her hangi bir sonuç bulunamadı";
}
}
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;
}
Oluşturduğumuz sayfada ‘google’ kelimesini aradığımızda aşağıdaki gibi bir sonuç bulur
‘Google’ kelimesinin aksine veritabanımızda bulunmayan ‘doogle’ kelimesini ararsak herhangi bir sonuç dönmeyeceği için bize tavsyede bulunur.

Evet arkadaşlar güzel bir uygulamayı daha sizlere anlatmış oldum. Bir sonraki makalemde görüşmek üzere..
http://www.sahinzaybak.com/

0 yorum:
Yorum Gönder