Full-Text Search Kurulumu ve Sorgu Örnekleri

     Bu makalede SQL Server’da Full-Text search kurulumu ve sorgu örnekleri anlatılacaktır. Makalenin amacı sorgu sonucu uzun süren string alanlarda Full-Text Search kullanarak sorguların hızlı geri dönüşünü sağlamaktır. 1-) Full-Text Search kurulumu, SQL Server kurulum dosyası içerisinden “Full-Text and Semantic Extractions for Search” özelliği seçilere kurulum tamamlanır.     2-) Full-Text Search kurulumu tamamlandıktan sonra Configuration Manager Ekranında bu özelliğin geldiğini ve Running modda olduğundan emin olunmalıdır. Bu özelliğin aktif olması için kurulum sonra PC restarta gönderilir.       3-) Full-Text search özelliğini kullanmak öncelikle katalog belirlemelisiniz. Oluşturacağınız kataloğu script ile veyahut SSMS üzerinden yapabilirsiniz. Eğer biz search edeceğimiz veri içerisinde ş,i,ö,ğ gibi Türkçe karakterlere duyarlı olmasını istiyorsak ACCENT SENSITIVITY özelliği ON olarak oluşturulmalı.    CREATE fulltext catalog FTC_TblName WITH ACCENT_SENSITIVITY= OFF AUTHORIZATION [dbo]; 4-) Oluşturulan katalog içerisine Hangi tablonun hangi kolonunun da search yapılacaksa o alan create scripte eklenir. Ayrıca değişikliklerin işlemesi için change tracking açık olmalı ve […]

Full-Text Search Kurulumu ve Sorgu Örnekleri

     Bu makalede SQL Server’da Full-Text search kurulumu ve sorgu örnekleri anlatılacaktır. Makalenin amacı sorgu sonucu uzun süren string alanlarda Full-Text Search kullanarak sorguların hızlı geri dönüşünü sağlamaktır.

1-) Full-Text Search kurulumu, SQL Server kurulum dosyası içerisinden “Full-Text and Semantic Extractions for Search” özelliği seçilere kurulum tamamlanır.

 

 

2-) Full-Text Search kurulumu tamamlandıktan sonra Configuration Manager Ekranında bu özelliğin geldiğini ve Running modda olduğundan emin olunmalıdır. Bu özelliğin aktif olması için kurulum sonra PC restarta gönderilir.

 

 

 

3-) Full-Text search özelliğini kullanmak öncelikle katalog belirlemelisiniz. Oluşturacağınız kataloğu script ile veyahut SSMS üzerinden yapabilirsiniz. Eğer biz search edeceğimiz veri içerisinde ş,i,ö,ğ gibi Türkçe karakterlere duyarlı olmasını istiyorsak ACCENT SENSITIVITY özelliği ON olarak oluşturulmalı.

 

 CREATE fulltext catalog FTC_TblName WITH ACCENT_SENSITIVITY= OFF AUTHORIZATION [dbo];

4-) Oluşturulan katalog içerisine Hangi tablonun hangi kolonunun da search yapılacaksa o alan create scripte eklenir. Ayrıca değişikliklerin işlemesi için change tracking açık olmalı ve system bilgisine ait kelimeleri aramada saymaması için stoplist’e eklenir.

 

 

CREATE fulltext INDEX ON [dbo].[Tbl_FTS]([Name]) KEY INDEX [PK_Tbl_FTS] on FTC_TblName WITH CHANGE_TRACKING AUTO, STOPLIST = SYSTEM

 

5-) Aramada olmamasını istediğimiz kelimeler olursa bir stoplist oluşuturulur.

CREATE FULLTEXT STOPLIST [TurkceBaglaclar] AUTHORIZATION [dbo];

 

6-) Search yaparken istemediğimiz kelimeler stopword’e eklenir.

ALTER FULLTEXT STOPLIST [TurkceBaglaclar] ADD ‘ve’ LANGUAGE ‘English’;

 

7-) Eklemiş olduğumuz stopword kelimelerini aşağıdaki dmv ile bulabiliriz.

select * from sys.fulltext_stopwords

 

 

Sorgu Örnekleri

 select * from Tbl_FTS with(nolock) WHERE CONTAINS(Name,'”Adam Eva”‘)

 

–Adam Eva Kelimesini(büyük küçük uyumuna bakmaksızın) bulur.

 select * from Tbl_FTS with(nolock) WHERE CONTAINS(Name,'”Adam Eva*”‘)

 

–Adam Eva ve Adam EVATAR, Adam EVACAN isimlerini de getirir. Kısacası Eva kelimesinden sonra gelen tüm kelimeleri içeren kelimeleri bulur.(büyük küçük uyumuna bakmaksızın) bulur.(Başına * koymak sorguda değişikliğe neden olmaz.)

 select * from Tbl_FTS with(nolock) WHERE CONTAINS(Name,'”Ad Ev*” near Habil’)

 

–Ad ile başlayıp yanında Ev ve Ev’dan türeyen kelimeler ile ayrıca Habil kelimesi geçen içeriği bulur.

 select * from Tbl_FTS with(nolock) WHERE CONTAINS(Name,’Ad near Ev’)

 

ve

 select * from Tbl_FTS with(nolock) WHERE CONTAINS(Name,’Ad ~ Ev’)

 

— near ve ~ işareti aynı anlama gelmektedir. Yukarıdaki sorgu sonucu bize Ad ve Ev yan yana geçen içeriği verir.

 select * from Tbl_FTS with(nolock) WHERE CONTAINS(Name,'”*Adam*” or “*Eva*”‘)

 

–Adam veya Eva ile başlayan isimleri bulur. İki isimlilerde sıralama önemli değildir.

 select * from Tbl_FTS with(nolock) WHERE Freetext(Name,'”*Adam*” or “*Eva*”‘)

 

–İçinde Adam geçen tüm kelimeleri bulur. Eva kelimesinin olmasının bir önemi yok.

 select * from Tbl_FTS with(nolock) WHERE CONTAINS(Name,’FORMSOF(INFLECTIONAL, sürmek)’)

 

–Eş anlamlı tüm kelimeleri bulur. Kullanmak vb.

 select * from Tbl_FTS with(nolock) WHERE CONTAINS(Name,’FORMSOF(THESAURUS, sürmek)’)

 

–sürmek kelimesine ait tüm tense’leri bulur. Sürdü, sürecek, sürüyor vb.

select f.*,D.Name from

containstable(Tbl_FTS,Name,N’ISABOUT (Adam weight(.1), Eva weight(.9))’) F

INNER JOIN Tbl_FTS D ON F.[KEY] = D.ID

ORDER BY F.RANK

 

–Adam ve Eva kelimelerini içeren tüm kelimeleri bulur. Belirlediğimiz kelimenin full-text atılan kolon altındaki row’un genele oranından kaynaklı ağırlık oranlarına göre sql rank’layarak sıralar.

select f.*,D.Name from

freetexttable(Tbl_FTS,Name,N’ISABOUT (Adam weight(.1), Eva weight(.9))’) F

INNER JOIN Tbl_FTS D ON F.[KEY] = D.ID

ORDER BY F.RANK

 

–Adam ve Eva kelimelerini içeren tüm kelimeleri bulur. Belirlediğimiz kelimenin full-text atılan kolon altındaki row’un genele oranından kaynaklı Ağırlık oranlarına göre sql rank’layarak sıralar. Buradaki rank’ın containstable’dan farklı olması “freetexttable” aramada sadece kelimenin yoğunluğunu alması.

 

Full-Text Search Part-II

 

 

Katkılarından dolayı Murat Sarı’ya teşekkürler.

 

 

 

Benzer Yazılar

SQL SERVER RIGHT-LEFT PARTITION

SQL Server 5 gün önce

SQL Server’da partitioning, büyük veritabanı tablolarını daha yönetilebilir ve performanslı hale getirmek amacıyla kullanılan bir tekniktir. Bu teknik, tablonun verilerini fiziksel olarak değil, mantıksal olarak parçalara ayırır. Veriler, belirli bir partition function ve partition scheme kullanılarak farklı bölümlere yönlendirilir. Partitioning, özellikle büyük veri kümeleriyle çalışan veri tabanlarında sorgu performansını artırır ve veri yönetimini kolaylaştırır. Partition Function ve Partition Scheme nedir? Partition Function: Verilerin hangi kriterlere göre bölüneceğini belirler. Örneğin, bir tarih aralığına göre verileri ayırmak. Partition Scheme: Verilerin hangi filegroup’larda depolanacağını belirler.   Örnek olarak Range LEFT ve Range RIGHT olmak üzere iki ayrı tabloda partition nasıl yapılır sizlere göstereceğim. İlk olarak Range LEFT olan partition yapısından başlayacağım. Öncelikle Veri tabanıma yeni filegroup ve file ekliyorum Şimdi sıra FUNCTION ve SCHEME oluşturmakta ben tablomu yıllık olarak partition yaptım sizler ihtiyaçlarınız doğrultusunda aylık,günlük vs yapabilirsiniz. LEFT partition dediğimiz olay vermiş olduğunuz tarih aralığına eşit bir veri geldiğinde bu veriyi solundaki partition […]

Veritabanı Recovery Pending Durumu ve Düzeltme Seçenekleri

SQL Server 2 hafta önce

İçindekilerVeritabanı Recovery Pending Durumu Nedir?Veritabanı Neden Recover Pending Duruma Düşer?Recovery Pending Durumu Nasıl Çözülür?SonuçKaynaklarVeritabanı Recovery Pending Durumu Nedir? SQL Server’da veritabanları bazı nedenlere bağlı olarak “Recovery Pending” (Kurtarma Bekleme)  moduna geçebilir. Veritabanın düzgün bir şekilde kapatılmaması, eksik veya bozuk log dosyaları, disk depolama sorunları, sistemde yaşanan anormal şekilde çökmeler veya MS SQL Server’daki hatalar bu duruma sebep olabilir. Recovery durumu, aslında veritabanını tekrar kullanılabilir hale getirmek için bir kurtarma işlemi yürüttüğünü ifade eder ve üç aşamadan oluşur; Analysis (Analiz): Transaction log incelemesi yapılması ve işlemlerin tamamlanma (Commit) durumunun kontrol edilmesi, Redo (Yeniden İşleme): Tamamlanmış (Commit) ancak henüz diske yazılamamış olan işlemlerin yeniden işlenmesi, Undo (Geri Alma): Başlamış (Begin) ancak tamamlanmamış (Commit) işlemlerin  geri alınmasıdır.   Veritabanı Neden Recover Pending Duruma Düşer? SQL Server Restart Süreci SQL Server servisi restart edildiğinde üzerinde bulunan tüm veritabanları tutarlılığın sağlanması için otomatik olarak recovery moduna girer ve redo/undo işlemleri sürecince devam eder. Ani Sistem […]

SQL Server DMV ve DMF – 6

SQL Server 2 hafta önce

Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from  sys.dm_os_process_memory; Görsel – 1   Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]

1 Yorum

Yorum Yaz

Rastgele