Herhangi bir proje, internet sitesi geliştirirken eğer arama kısmı yapacak olursak, bunu için google custom search kullanabilirsiniz. Ancak veritabanı içerisinde çalışacak kendi arama motorunuzu yapmak istiyorsanız, bunu ancak gerçekten temiz çalışan bir stored procedure (prosedür) yardımıyla yapabilirsiniz.
Arama sorgusu yapmak en çok uğraşılması gereken konulardan biridir, zira arama süresinin uzun olması, yanlış sonuç getirilmesi, gereksiz sonuç getirilmesi en çok dikkat edilmesi gereken başlıklardandır. Site tarafındaki kod için genellikle pek fazla uğraşılmasına gerek yoktur, zaten alınacak değer ve verilecek listeyi göstermek kısımları dışında kalan bölümler asıl etkinliği belirleyen şeyler olacaktır. Detaylı bir liste yapmak gerekirse, sql dahilinde arama ile ilgili temel olarak şunları düşünebilirsiniz:
- Alınacak veri (örn: kelime) parçalara bölünecek mi, olduğu gibi mi arama sorgusuna girecek?
- Arama işleminde kullanılacak kolon, kolonlar, tablo, tablolar iyice belirlenmeli. Bir çok tablodaki kolonlarda mı arama yapılacak, yoksa tek bir tablonun tek bir kolonunda mı? Buna göre baştan kesin kararlar verilmeli.
- Arama işlemi bir çok kolonda ise sıraları ya da iç içelikleri belirlenmeli.
- Alınan veri her kolonun sonunda mı, her yerinde mi aranacak bu belirlenmeli.
- Çıkarılan sonuç listesindeki öğeler gruplanırken tutarlılık sağlanıp, alakasız öğeler birleştirilmemeli.
Bunlar tabii ki söylediğim gibi başlangıçta aklınızda olması gereken şeyler, durumlara göre belli bir noktadan sonra arama sorgusu öyle bir hale gelebilir ki kendiniz bile takip edemeyebilirsiniz. (:
Örnek olarak basit bir prosedür. (stored procedure)
CREATE PROCEDURE [dbo].[baslikAra]@arananDeger nvarchar(150)ASBEGINDECLARE @sonuclarTABLE(ID int,baslik nvarchar(200))INSERT@sonuclarSELECTPOS.ID,POS.baslikFROMposts AS POSWHEREPOS.baslik LIKE '%'+ @arananDeger + '%'SELECT * FROM @sonuclar GROUP BY ID,baslikEND
- "posts" tablosunu "POS" olarak kısaltıyoruz.
- Sonuçları yerleştirmek için 2 kolonlu geçici bir tablo oluşturuyoruz.
- "@arananDeger" site üzerinden elimize ulaşan değer. Select kısmında bu değeri iki yanındaki "%" işaretleri ile "baslik" kolonunun her yerinde arıyoruz. Sonuçları geçici "@sonuclar" tablosuna atıyoruz.
- 2 kolonu gruplayarak, geçici "@sonuclar" tablosundan verileri listeliyoruz.