Aracılığıyla paylaş


Tam metin dizini oluştururken dil seçme

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

Tam metin dizini oluştururken, dizine alınan sütun için sütun düzeyinde bir dil belirtmeniz gerekir. Belirtilen dilin sözcük ayırıcısı ve kök ayırıcıları , sütundaki tam metin sorguları tarafından kullanılır. Tam metin dizini oluştururken sütun dilini seçerken göz önünde bulundurmanız gereken birkaç şey vardır. Bu önemli noktalar, metninizin Full-Text Altyapısı tarafından nasıl belirteçlendirildiği ve dizine nasıl alındığı ile ilgilidir.

Uyarı

Tam metin dizini sütunu için sütun düzeyinde bir dil belirtmek için sütunu belirtirken yan tümcesini LANGUAGE <language_term> kullanın. Daha fazla bilgi için bkz. CREATE FULLTEXT INDEX and ALTER FULLTEXT INDEX.

Bu bölümde sözcük ayırıcıları ve kök sözcüklerine giriş bilgileri sağlanır ve Full-Text Arama'nın sütun düzeyindeki dilin dil kodu tanımlayıcısını (LCID) nasıl kullandığı açıklanır.

Sözcük ayırıcılara ve kök ayırıcılara giriş

SQL Server, sözcük ayırıcı ve sözcük ayırıcılardan oluşan eksiksiz bir aile içerir. Microsoft Doğal Dil Grubu (NLG) bu dil bileşenlerini uygular ve destekler.

Sözcük ayırıcılar aşağıdaki avantajları sağlar:

  • Sağlamlık

    Test, sözcük ayırıcıların yüksek basınçlı sorgu ortamlarında sağlam olduğunu gösterir.

  • Security

    SÖZCÜK ayırıcıları SQL Server'da varsayılan olarak etkindir. SQL Server'ın genel güvenliğini ve sağlamlığını artırmak için sözcük ayırıcılar ve filtreler gibi dış bileşenlerin imzalanması kesinlikle önerilir. Bu bileşenlerin şu şekilde imzalandığını doğrulamak için tam metin yapılandırabilirsiniz:

    EXECUTE sp_fulltext_service 'verify_signature';
    
  • Nitelik

    İç test, sözcük ayırıcıların önceki sözcük ayırıcılara göre daha iyi anlam kalitesi sağladığını gösterir. Bu, geri çekme doğruluğunu artırır.

  • Geniş bir dil listesi için kapsam, sözcük ayırıcılar SQL Server'da kullanıma hazır ve varsayılan olarak etkindir.

SQL Server'ın sözcük ayırıcı ve sözcük ayırıcı içerdiği dillerin listesi için bkz. sys.fulltext_languages.

Full-Text Arama sütun düzeyi dilin adını nasıl kullanır?

Tam metin dizini oluştururken, her sütun için geçerli bir dil adı belirtmeniz gerekir. Dil adı geçerliyse ancak sys.fulltext_languages katalog görünümü tarafından döndürülmezse, Full-Text Arama özelliği varsa aynı dil ailesinin kullanılabilir en yakın dil adına geri döner. Aksi takdirde Full-Text Arama, Nötr sözcük ayırıcısına geri döner. Bu geri dönüş davranışı, geri çağırma doğruluğunu etkileyebilir. Bu nedenle, tam metin dizini oluştururken her sütun için geçerli ve kullanılabilir bir dil adı belirtmenizi kesinlikle öneririz.

Uyarı

LCID, tam metin dizinleme için uygun olan tüm veri türlerinde ( char veya nchar gibi) kullanılır. Karakter, varchar veya metin türü sütununun sıralama düzeni LCID tarafından tanımlanan dilden farklı bir dil ayarına ayarlandıysa, LCID yine de bu sütunların tam metin dizini ve sorgulanması sırasında kullanılır.

Sözcük hataya neden olan

Sözcük ayırıcı, dile özgü olan sözcük sınırlarında dizine alınan metni belirteci oluşturur. Bu nedenle, sözcük bölme davranışı farklı diller arasında farklılık gösterir. {, xve x} dillerinde dizin oluşturmak için tek bir dil kullanırsanız, bazı davranışlaryz beklenmeyen sonuçlara neden olabilir. Örneğin, tire (-) veya virgül (,), bir dilde atılan ancak başka bir dilde olmayan bir sözcük sonu öğesi olabilir. Ayrıca, belirli bir sözcük farklı dilde farklı şekilde kaynaklanabileceği için nadiren beklenmeyen kök oluşturma davranışı oluşabilir. Örneğin, İngilizce dilinde sözcük sınırları genellikle boşluk veya bir tür noktalama işaretidir. Almanca gibi diğer dillerde sözcükler veya karakterler birlikte birleştirilebilir. Bu nedenle, seçtiğiniz sütun düzeyindeki dil, bu sütunun satırlarında depolamayı beklediğiniz dili temsil etmelidir.

Batı dilleri

Batı dil ailesi için, hangi dillerin bir sütunda depolandığından emin değilseniz veya birden fazla dilin depolanmasını bekliyorsanız, genel bir geçici çözüm, sütunda depolanabilecek en karmaşık dil için sözcük ayırıcıyı kullanmaktır.

Örneğin, İngilizce, İspanyolca ve Almanca içeriği tek bir sütunda depolamayı bekleyebilirsiniz. Bu üç Batı dili, almanca desenleri en karmaşık olan benzer sözcük ayırıcı desenlere sahiptir. Bu nedenle, bu durumda iyi bir seçim İngilizce ve İspanyolca metinleri doğru işleyebilen Almanca sözcük ayırıcıyı kullanmaktır. Buna karşılık İngilizce sözcük ayırıcı, Almanca'nın bileşik sözcükleri nedeniyle Almanca metinleri mükemmel işleyemeyebilir.

Bir dil ailesinde en karmaşık dilin sözcük ayırıcısını kullanmak, ailedeki her dilin mükemmel dizine ayrılmasını garanti etmez. En karmaşık sözcük ayırıcının başka bir dilde yazılmış metni doğru işleyebildiği köşe durumları olabilir.

Batı dili olmayan diller

Batı dilleri (Çince, Japonca, Hintçe vb.) için, dilsel nedenlerle önceki geçici çözüm mutlaka işe yaramaz. Batı dilleri dışındaki diller için aşağıdaki geçici çözümlerden birini göz önünde bulundurun:

  • Farklı ailelerden diller için

    Bir sütunda İspanyolca ve Japonca gibi önemli ölçüde farklı diller bulunabilecekse, farklı dillerin içeriğini ayrı sütunlarda depolamayı göz önünde bulundurun. Bu ayrım, her sütun için dile özgü sözcük ayırıcıyı kullanmanıza olanak sağlar. Bu çözümü seçerseniz ve sorgu zamanında sorgu dilini bilmiyorsanız, sorgunun doğru satırı veya belgeyi bulduğundan emin olmak için her iki sütunda da sorguyu vermeniz gerekebilir.

  • İkili içerik için (Microsoft Word belgeleri gibi)

    Dizine alınan içerik ikili türde olduğunda, metin içeriğini sözcük ayırıcıya göndermeden önce işleyen Full-Text Arama filtresi, ikili dosyada var olan belirli dil etiketlerine uygun olabilir. Bu durumda, dizin oluşturma zamanında, filtre bir belge veya belgenin bölümü için doğru LCID'yi yayar. Full-Text Altyapısı daha sonra bu LCID ile dil için sözcük ayırıcısını çağırır. Ancak, çok dilli içeriği dizine aldıktan sonra içeriğin doğru dizine oluşturulduğundan emin olmanız önerilir.

  • Düz metin içeriği için

    İçeriğiniz düz metin olduğunda, içeriği xml veri türüne dönüştürebilir ve her bir belge veya belge bölümüne karşılık gelen dili gösteren dil etiketleri ekleyebilirsiniz. Ancak bunun işe yarayebilmesi için tam metin dizini oluşturmadan önce dili bilmeniz gerekir.

Dallanma

Sütun düzeyinde dilinizi seçerken dikkate alınması gereken bir diğer nokta da kökenlendirmedir. Tam metin sorgularında kök oluşturma, belirli bir dildeki bir sözcüğün tüm saplı (etkili) biçimlerini arama işlemidir. Çeşitli dilleri işlemek için genel bir sözcük ayırıcı kullandığınızda, kök oluşturma işlemi yalnızca sütundaki diğer diller için değil, yalnızca sütun için belirtilen dil için çalışır. Örneğin, Almanca kök adları İngilizce veya İspanyolca (vb.) için çalışmaz. Bu, sorgu zamanında hangi dili seçtiğinize bağlı olarak geri çağırmanızı etkileyebilir.

Dil seçiminde dikkate alınacak bir diğer nokta da verilerin nasıl temsil edilmesiyle ilgilidir. Varbinary(max) sütununda depolanmayan veriler için özel filtreleme yapılmaz. Bunun yerine, metin genellikle hataya neden olan bileşen as-isaracılığıyla geçirilir.

Ayrıca, sözcük ayırıcılar esas olarak yazılı metni işlemek için tasarlanmıştır. Bu nedenle, metninizde herhangi bir işaretleme türü (HTML gibi) varsa, dizin oluşturma ve arama sırasında harika bir dil doğruluğu elde edemeyebilirsiniz. Bu durumda iki seçeneğiniz vardır: Tercih edilen yöntem, metin verilerini bir varbinary(max) sütununda depolamak ve filtrelenebilmesi için belge türünü belirtmektir. Bu bir seçenek değilse, nötr sözcük ayırıcıyı kullanmayı ve mümkünse, kirli sözcük listelerinize işaretleme verileri (HTML'de 'br' gibi) eklemeyi düşünebilirsiniz.

Uyarı

Dil tabanlı kök oluşturma, nötr dili belirttiğinizde devreye girmez.

Tam metin sorgusunda varsayılan olmayan bir sütun düzeyinde dil belirtme

Varsayılan olarak, SQL Server'da Full-Text Arama, tam metin yan tümcesine dahil edilen her sütun için belirtilen dili kullanarak sorgu terimlerini ayrıştırmaktadır. Bu davranışı geçersiz kılmak için sorgu zamanında farklı olmayan bir dil belirtin. Kaynakları yüklü olan desteklenen diller için CONTAINSLANGUAGE <language_term>, CONTAINSTABLE, FREETEXT veya FREETEXTTABLE sorgusunun yan tümcesi, sorgu terimlerinin sözcük kesme, sözcük kökü oluşturma, eş anlamlılar sözlüğü ve durdurma işlemi için kullanılan dili belirtmek için kullanılabilir.