Merhabalar,
SQL Server'da arama işlemi yapılıyor.
Arama da > TORKU ŞEKER aramasını LIKE ile yapınca %TORKU% bulma da sorun yok.
Ama aramayı %KORKU% yaptığımız da veri getirmiyor. Bunu skorlama ile en yakın
sonuçları da gösterecek şekilde nasıl bir sorgu veya işlem yapabiliriz acaba?
Yani %KORKU% yazılsa bile TORKU şekeri de sonuçlarda göstermesi lazım.
Teşekkürler.
NOT!
DB hali hazırda çalışan farklı bir program DB'si. Ful Text indexleme yapılmamış.
Kolay gelsin.
(17-01-2024, Saat: 16:51)RAD Coder Adlı Kullanıcıdan Alıntı: [ -> ]Aşağıdaki konu başlıklarında nasıl yapılacağı anlatılmış.
SQL Fuzzy Match
DIFFERENCE and SOUNDEX SQL
Merhabalar,
Teşekkürler hocam. Bugün bu işi araştırınca aklım iyice karıştı.
Kodları yorumlayamıyorum

Biraz daha bakmaya devam edelim.
Teşekkürler tekrar paylaşımınız için.
Kolay gelsin.
(17-01-2024, Saat: 16:51)RAD Coder Adlı Kullanıcıdan Alıntı: [ -> ]Aşağıdaki konu başlıklarında nasıl yapılacağı anlatılmış.
SQL Fuzzy Match
DIFFERENCE and SOUNDEX SQL
Hocam mümkünse daha basit kullanımı olan bir örnek var mı?
Açıkcası anlayamadım. Koda bakıyorum, o bana bakıyor.
Teşekkürler.
Merhaba,
Ben daha ilkel fakat işlevsel bir yöntem sunmak isterim.
Performans ve dahası tartışmaya açık olmakla birlikte göz ardı edilebilir bir durum olabilirler. Fakat benim önerim mevcuttaki hazır yapılar veya full-text-search gibi işlemlere alternatif olarak halis bir arama yapısını kendimizin oluşturması.
Konuyu okuyunca aklıma gelen ilk şey aramak için gönderilen kelimeyi görece öbeklerine ayırmak oldu. Örneğin "serhatyanalak" aranan kelime olsun ve buna referans olan benzer kayıtlarda gelsin istiyorsak kelimeyi;
s
se
ser
serh
şeklinde uzunluğu boyunca ayırır sonra aynı işlemin tersini yapar;
lak
alak
nalak
şeklinde yine uzunluğu boyunca ayırır en son bu iki sorgu sonucunu birleştirir ve LIKE ile ana sorguya entegre eder aratırız.
Böylece elimizde tek kelimeden türemiş görece anlamlı bir çok alternatif kelime olmuş olur.
Bunu daha da insancıllaştırmak istersek bir harf bütününün kelime sayılabilmesi için en az kaç adet yan yana harf olması gerektiğine karar verip hesaba katar ve elimizdeki bu kelime haznesini ona göre filtreleriz. Ben örnek olması açısından 3 olarak baz aldım.
Sonra Bu filtreli kelime haznesini aratır ve istediğimiz sonuçları büyük oranda görmüş oluruz.
Tabiki aranan kelimenin önemi burada büyük. Bu sadece fikir vermesi için bir örnektir. Kelime havuzunu genişletmek sizin elinizde.
[
attachment=2542] [
attachment=2543]
WITH bolumleme AS (
SELECT
CAST(SUBSTRING('serhatyanalak', 1, 1) AS NVARCHAR(100)) AS bolunen,
2 AS baslangic
UNION ALL
SELECT
CAST(bolunen + SUBSTRING('serhatyanalak', baslangic, 1) AS NVARCHAR(100)),
baslangic + 1
FROM
bolumleme
WHERE
baslangic <= LEN('serhatyanalak')
)
,
bolumleme_tersten AS (
SELECT
CAST(SUBSTRING('serhatyanalak', LEN('serhatyanalak'), 1) AS NVARCHAR(100)) AS bolunen,
LEN('serhatyanalak') - 1 AS baslangic
UNION ALL
SELECT
CAST(bolunen + SUBSTRING('serhatyanalak', baslangic, 1) AS NVARCHAR(100)),
baslangic - 1
FROM
bolumleme_tersten
WHERE
baslangic >= 1
)
SELECT
DISTINCT sy.*
FROM sy_names sy
JOIN (SELECT q.bolunen
FROM (
SELECT REVERSE(bolunen) AS bolunen
FROM bolumleme_tersten
WHERE LEN(bolunen) > 2
UNION ALL
SELECT bolunen
FROM bolumleme
WHERE LEN(bolunen) > 2
) q) b ON LEN(b.bolunen) > 2 AND sy.title LIKE '%' + b.bolunen + '%'