SQL Server’da Tam Metin Arama Uygulaması: Kapsamlı Bir Kılavuz

Veritabanı sistemleri ile etkileşimde bulunan uygulamalar geliştirirken, sıklıkla karşılaşılan bir zorluk, birden fazla alan boyunca etkili arama yapabilme yeteneğidir. Bu özellikle, kullanıcıların kısmi sorgular ve varyasyonlar temelinde sonuç bulmayı beklediği kişilerin isimleri için geçerlidir. Bu yazıda, SQL Server ile çalışan geliştiricilerin karşılaştığı yaygın bir sorunu ele alacağız: çeşitli sütunlarda isimler için verimli bir tam metin arama uygulamak.

Sorun

Geliştirici, SQL Server Tam Metin Arama kullanarak isimler için arama yaparken tutarsız sonuçlarla karşılaştı. Senaryo, isimler için üç sütunu olan bir tabloyla ilgiliydi: Ad, İkinci Ad ve Soyadı. Kullanıcılar ya tam bir isim ya da ismin kısımlarını girebiliyordu, ancak yalnızca belirli sorgular sonuç veriyordu. Örneğin:

  • Fry için yapılan arama “Phillip Fry” için beklenen sonucu döndürüyordu.
  • Fakat Phillip Fry, Fr veya Phil araması yapıldığında, hiçbir sonuç görünmüyordu.
  • Wong gibi diğer isimlerde de tutarsız davranışlar gözlemlendi.

Bu tutarsızlık, arama sorgularının nasıl oluşturulduğundan kaynaklanıyordu. CONTAINSTABLE fonksiyonu kullanarak yapılan ilk uygulama, kısmi kelime aramaları için gereken esnekliği sağlamıyordu.

Çözüm

İyi haber şu ki, sorguda bazı değişikliklerle tam metin arama doğru bir şekilde çalışabilir ve kısmi girişlerle bile istenen sonuçları sağlayabilir. SQL sorgusunda nasıl ayarlamalar yapılacağını şu şekilde açıklayalım:

Adım 1: Arama Dizesini Değiştirin

Anahtar değişiklik, arama dizesinin nasıl oluşturulduğudur. Sadece doğrudan girişi kullanmak yerine, joker karakterleri (*) kullanabilir ve girişi boşluklardan ayırarak daha esnek bir arama deseni oluşturabiliriz.

Örnek Uygulama

İşte değiştirilen SQL sorgusunun versiyonu:

@Name nvarchar(100),
...
-- Arama dizesini doğru formatlamak için bu satırı ekledik
DECLARE @SearchString varchar(100)

-- Boşlukları joker desenler ile değiştir
SET @SearchString = REPLACE(@Name, ' ', '*" OR "*')
SET @SearchString = '"*'+@SearchString+'*"'

SELECT Per.Lastname, Per.Firstname, Per.MiddleName
FROM Person as Per
INNER JOIN CONTAINSTABLE(Person, (LastName, Firstname, MiddleName), @SearchString) AS KEYTBL
ON Per.Person_ID = KEYTBL.[KEY]
WHERE KEY_TBL.RANK > 2
ORDER BY KEYTBL.RANK DESC;

Değişikliklerin Açıklaması

  1. Joker Ekleme: Arama terimlerinin önüne ve arkasına * ekleyerek, SQL Server’ın kısmi eşleşmeleri yakalamasına izin veriyoruz. Bu, kullanıcı Phillip diye aradığında, Phillip içeren isimleri bulmasını sağlayacaktır.

  2. Boşluk İşleme: REPLACE fonksiyonu, Amy Wong gibi girdileri SQL Server’ın ayrı terimler olarak yorumlayabileceği bir formatta dönüştürür. Boşlukları, varyasyonları bulmak için gereken arama söz dizimi ile değiştirir.

  3. Rütbe Filtreleme: Sorgu ayrıca yalnızca belirli bir RANK olan sonuçların görüntülenmesini sağlıyor ve en alakalı eşlemeleri önceliklendiriyor.

Sonuç

Bu tekniklerle SQL Server sorgularınızı geliştirerek, tam metin arama işlevselliğinizin verimliliğini ve doğruluğunu artırabilirsiniz. Bu, kullanıcı deneyimini geliştirmekle kalmaz, aynı zamanda uygulamanın giriş varyasyonlarına daha duyarlı olmasını sağlar. Etkili arama yapmanın anahtarının genellikle girdinin veritabanı tarafından nasıl anlaşıldığı ve işlendiği olduğunu unutmayın.

Bu stratejileri uygulayarak, uygulamanız etkili arama sonuçları sağlayacak ve kullanıcıların arama sorgularını nasıl girdiğinden bağımsız olarak ihtiyaç duydukları bilgileri bulmalarına yardımcı olacaktır. Konuyla ilgili daha fazla sorunuz varsa veya ek açıklama istediğiniz bir konu varsa, lütfen bizimle iletişime geçin!