Tam metin dizinleri oluşturma ve yönetme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Bu makale, SQL Server Database Engine'de tam metin indekslerin nasıl oluşturulacağını, doldurulacağını ve yönetileceğini açıklar. Tam metin bir indeks, bir tablodaki karakter tabanlı sütunlar üzerinde anahtar kelime ve dilsel aramayı destekler.

Tam metin kataloğu oluşturma

Tam metin bir indeks oluşturabilmek için tam metin kataloğa ihtiyacınız var. Katalog, bir veya daha fazla tam metin dizini için sanal bir kapsayıcıdır. Daha fazla bilgi için, Full-Text Katalogları Oluştur ve Yönet'e bakabilirsiniz.

Tam metin dizini oluşturma, değiştirme veya bırakma

Tam metin dizinini doldurma

Tam metin dizini oluşturma ve sürdürme işlemi, popülasyon (gezinmeolarak da bilinir) olarak adlandırılır. Üç tür tam metin dizini popülasyonu vardır:

  • Tam nüfus
  • Değişiklik izlemeye dayalı nüfus
  • Zaman damgasına dayalı artan nüfus

Daha fazla bilgi için bkz. Full-Text Dizinlerini Doldurma.

Tam metin dizininin özelliklerini görüntüleme

Transact-SQL ile tam metin dizininin özelliklerini görüntüleme

Katalog veya Dinamik Yönetim Görünümü Açıklama
sys.fulltext_index_catalog_usages Her bir tam metin kataloğuna ilişkin olarak tam metin dizin başvurusu için bir satır döndürür.
sys.fulltext_index_columns Tam metin dizininin parçası olan her sütun için bir satır içerir.
sys.fulltext_index_fragments Tam metin bir indeks, ters çevrilmiş indeks verilerini depolamak için tam metin indeks parçaları adı verilen dahili tablolar kullanır. Bu görünümü kullanarak bu parçalarla ilgili meta verileri sorgulayabilirsiniz. Bu görünüm, tam metin dizini içeren her tablodaki her tam metin dizini parçası için bir satır içerir.
sys.fulltext_indexes Tablosal bir nesnenin tam metin dizini başına bir satır içerir.
sys.dm_fts_index_keywords Belirtilen tablo için tam metin dizininin içeriği hakkında bilgi döndürür.
sys.dm_fts_index_keywords_by_document Belirtilen tablo için tam metin dizininin belge düzeyi içeriği hakkında bilgi döndürür. Belirli bir anahtar sözcük çeşitli belgelerde görünebilir.
sys.dm_fts_index_population Şu anda sürmekte olan tam metin dizini oluşumları hakkında bilgi verir.

SQL Server Management Studio ile tam metin dizininin özelliklerini görüntüleme

Not

Azure SQL veritabanlarının tam metin dizinlerinin özelliklerini görüntülemek için Transact-SQLkullanın.

  1. SQL Server Management Studio'da, Nesne Gezgini'nde sunucuyu genişletin.

  2. Veritabanları'nı genişletin ve ardından tam metin dizinini içeren veritabanını genişletin.

  3. tabloyugenişletin.

  4. Tam metin dizininin tanımlandığı tabloya sağ tıklayın, Full-Text dizini seçin ve Full-Text dizin bağlam menüsünde özellikler seçin. Bu işlem, Tam metin indeks Özellikler diyalog kutusunu açar.

  5. Bir sayfa seç panelinde, aşağıdaki sayfalardan herhangi birini seçin:

    Sayfa Açıklama
    Genel Tam metin dizininin temel özelliklerini görüntüler. Bu özellikler, veritabanı adı, tablo adı ve tam metin anahtar sütununun adı gibi birkaç değiştirilebilir özellik ve birçok değiştirilemez özelliği içerir. Değiştirilebilir özellikler şunlardır:

    Full-Text Dizin Durdurma Listesi

    Full-Text dizin oluşturma etkin

    Değişiklik İzleme

    Arama Özellikleri Listesi
    Sütunları Tam metin dizin oluşturma için kullanılabilen tablo sütunlarını görüntüler. Seçili sütun veya sütunlar tam metin dizinine alınmıştır. Tam metin dizinine eklemek istediğiniz kadar kullanılabilir sütun seçebilirsiniz. Daha fazla bilgi için bkz. Full-Text Dizinlerini Doldurma.
    Zamanlamaları Bu sayfayı, tam metin dizini popülasyonları için artımlı tablo popülasyonu başlatan bir SQL Server Aracısı işinin zamanlamalarını oluşturmak veya yönetmek için kullanın. Daha fazla bilgi için bkz. Full-Text Dizinlerini Doldurma.

    Not: Full-Text Index Properties iletişim kutusundan çıktıktan sonra, yeni oluşturulan herhangi bir zamanlama bir SQL Server Agent işiyle ilişkilendirilir (database_name.table_name üzerinde Artımlı Tablo Doldurmayı Başlat).
  6. Tamam öğesini seçerek yaptığınız değişiklikleri kaydedin ve Tam Metin Dizini Özellikleri iletişim kutusundan çıkın.

Dizine alınan tabloların ve sütunların özelliklerini görüntüleme

Çeşitli tam metin indeksleme özelliklerinin değerini almak için , gibi birkaç Transact-SQL fonksiyonu OBJECTPROPERTYEXkullanabilirsiniz. Bu bilgiler, tam metin aramasını yönetmek ve sorunlarını gidermek için kullanışlıdır.

Aşağıdaki tabloda, dizine alınan tablo ve sütunlarla ilgili tam metin özellikleri ve bunların ilgili Transact-SQL işlevleri listelenmektedir.

Mülk Açıklama Fonksiyon
Tam Metin Türü Sütunu TYPE COLUMN sütunun belge tipi bilgilerini içeren tabloda. SÜTUNÖZELLİĞİ
IsFulltextIndexed Bir sütunun tam metin indeksleme için etkin olup olmadığını belirtir. COLUMNPROPERTY
TamMetinAnahtarı mı Dizinin bir tablonun tam metin anahtarı olup olmadığı. INDEXPROPERTY (.Özellik)
TableFulltextBackgroundUpdateIndexOn Tablonun tam metin arka plan güncelleştirme dizinine sahip olup olmadığını. OBJECTPROPERTYEX
TableFulltextCatalogId Tablonun tam metin dizin verilerinin bulunduğu tam metin katalog kimliği. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Bir tablonun tam metin değişiklik izleme özelliğinin etkinleştirilip etkinleştirilmediği. OBJECTPROPERTYEX
TableFulltextDocsProcessed Tam metin dizini oluşturmanın başlangıcından bu yana işlenen satır sayısı. OBJECTPROPERTYEX
TableFulltextFailCount Dizine eklenmeyen satır sayısı Full-Text. OBJECTPROPERTYEX
TableFulltextItemCount Başarıyla tam metin indekslemesi gerçekleştirilmiş satır sayısı. OBJECTPROPERTYEX
TableFulltextKeyColumn Tam metin benzersiz anahtar sütununun sütun kimliği. OBJECTPROPERTYEX
TabloTamMetinBirleştirmeDurumu Tam metin dizini olan bir tablonun şu anda birleştirmede olup olmadığı. OBJECTPROPERTYEX
TabloTümMetinBekleyenDeğişiklikler İşlenmek üzere bekleyen değişiklik izleme girdilerinin sayısı. OBJECTPROPERTYEX
TableFulltextPopulateStatus Tam metin tablosunun popülasyon durumu. OBJECTPROPERTYEX
TableHasActiveFulltextIndex Tablonun etkin bir tam metin dizinine sahip olup olmadığı. OBJECTPROPERTYEX

Tam metin anahtar sütunu hakkında bilgi alma

Genellikle, CONTAINSTABLE veya FREETEXTTABLE satır kümesi değerli işlevlerinin sonucunu temel tabloyla birleştirirsiniz. Böyle durumlarda benzersiz anahtar sütun adını bilmeniz gerekir. Belirli bir benzersiz indeksin tam metin anahtarı olarak kullanılıp kullanılmadığını kontrol edebilir ve tam metin anahtar sütununun tanımlayıcısını alabilirsiniz.

Belirli bir benzersiz dizinin tam metin anahtar sütunu olarak kullanılıp kullanılmadığını belirleme

INDEXPROPERTY işlevini çağırmak için SELECT deyimi kullanın. Fonksiyon çağrısında, tablonun adını (OBJECT_ID) tablo kimliğine dönüştürmek için fonksiyonu kullanın, tablo için benzersiz bir indeksin adını belirtin ve IsFulltextKey indeks özelliğini aşağıdaki gibi belirtin:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');

Bu ifade, dizin tam metin anahtar sütunu için benzersizliği zorluyorsa 1, zorlamıyorsa 0 döndürür.

Örnek

Aşağıdaki örnek, indeksin PK_Document_DocumentNode tam metin anahtar sütunu için benzersizliği zorunlu kılıp sağlamadığını kontrol eder:

USE AdventureWorks2025;
GO

SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');

Bu örnek, PK_Document_DocumentNode dizin tam metin anahtar sütunu için benzersizliği zorluyorsa 1 döndürür. Aksi takdirde, 0 veya NULL döndürür. NULL Geçersiz bir indeks adı kullandığınız, indeks adının tabloya uymadığı, tablonun olmadığı ve benzeri bir şey demektir.

Tam metin anahtar sütununun tanımlayıcısını bulma

Her tam metin etkinleştirilmiş tabloda, tablo için benzersiz satırlar ( benzersiz anahtar sütun) zorunlu kılan bir sütun bulunur. OBJECTPROPERTYEX işlevinden elde edilen TableFulltextKeyColumn özelliği, benzersiz anahtar sütununun sütun kimliğini içerir.

Bu tanımlayıcıyı almak için, fonksiyonu SELECT çağıran bir OBJECTPROPERTYEX ifade kullanın. Tablo adını (OBJECT_ID) tablo kimliğine dönüştürmek ve özelliği aşağıdaki gibi belirtmek için fonksiyonu kullanınTableFulltextKeyColumn:

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn') AS 'Column Identifier';

Örnekler

Aşağıdaki örnek, tam metin anahtar sütununun veya NULL'nin tanımlayıcısını döndürür. NULL geçersiz bir indeks adı kullandığınızı, indeks adının tabloya uymadığını, tablonun var olmadığını vs. ima eder.

USE AdventureWorks2025;
GO

SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

Aşağıdaki örnek, sütunun adını almak için benzersiz anahtar sütununun tanımlayıcısının nasıl kullanılacağını gösterir.

USE AdventureWorks2025;
GO

DECLARE @key_column AS SYSNAME;

SET @key_column = COL_NAME(
    OBJECT_ID('Production.Document'),
    OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn')
);

SELECT @key_column AS 'Unique Key Column';
GO

Bu örnek, Document tablosunun benzersiz anahtar sütunu DocumentNode'un adını içeren tek bir satır görüntüleyen Unique Key Columnadlı bir sonuç kümesi sütunu döndürür. Eğer bu sorgu geçersiz bir indeks adı içeriyorsa, indeks adı tabloya uymuyorsa, tablo yoksa ve benzeri şekilde NULLdöndürür.

varbinary(max) ve XML sütunlarının dizinlenmesi

Bir varbinary(max), varbinary veya xml sütununu tam metin indeksle indekslerseniz, diğer tam metin indeksli sütunlar gibi tam metin önlemleri (CONTAINS ve FREETEXT) ve fonksiyonları (CONTAINSTABLE ve FREETEXTTABLE) kullanarak sorgulayabilirsiniz.

Dizin varbinary(max) veya varbinary verileri

Tek bir varbinary(max) veya varbinary sütunu birçok belge türünü depolayabilir. Database Engine, işletim sisteminde filtre kurulmuş ve mevcut olan herhangi bir belge tipini destekler. Her belgenin belge türü, belgenin dosya uzantısı tarafından tanımlanır. Örneğin, bir .doc dosya uzantısı için tam metin arama, Microsoft Word belgelerini destekleyen filtreyi kullanır. Kullanılabilir belge türlerinin listesi için sys.fulltext_document_types katalog görünümünü sorgula.

Full-Text Altyapısı, işletim sisteminde yüklü olan mevcut filtreleri kullanabilir. İşletim sistemi filtrelerini, sözcük ayırıcılarını ve kök sözcük ayırıcılarını kullanabilmek için bunları sunucu örneğine aşağıdaki gibi yüklemeniz gerekir:

EXECUTE sp_fulltext_service
    @action = 'load_os_resources',
    @value = 1;

varbinary(max) sütununda tam metin dizini oluşturmak için, Full-Text Altyapısı'nın varbinary(max) sütunundaki belgelerin dosya uzantılarına erişmesi gerekir. Bu bilgiyi, tam metin indeksindeki varbinary(max) sütunuyla ilişkilendirdiğiniz bir tablo sütununda, yani tip sütununda saklamalısınız. Full-Text Altyapısı, bir belgenin dizinini oluştururken hangi filtrenin kullanılacağını belirlemek için tür sütunundaki dosya uzantısını kullanır.

XML verilerini dizine oluşturma

xml veri türü sütunu yalnızca XML belgelerini ve parçalarını depolar ve belgeler için yalnızca XML filtresi kullanılır. Bu nedenle, bir tür sütunu gereksizdir. xml sütunlarında, tam metin dizini XML öğelerinin içeriğini dizine alır, ancak XML işaretlemesini yoksayar. Öznitelik değerleri, sayısal değerler olmadığı sürece tam metin dizinleme uygulanır. Öğe etiketleri belirteç sınırları olarak kullanılır. İyi biçimlendirilmiş XML veya HTML belgeleri ve birden çok dil içeren parçalar desteklenir.

Bir xml sütununda indeksleme ve sorgulama hakkında daha fazla bilgi için bkz. Tam metin arama ile XML sütunları kullanın.

Tablo için tam metin dizini oluşturmayı devre dışı bırakma veya yeniden etkinleştirme

Database Engine'de, kullanıcı tarafından oluşturulan tüm veritabanları varsayılan olarak tam metin olarak etkinleştirilmiştir. Ayrıca, tek bir tablo üzerinde tam metin dizini oluşturulduğunda ve dizine bir sütun eklendiğinde tam metin dizini için otomatik olarak etkinleştirilir. Son sütun tam metin dizininden çıkarıldığında, tablo tam metin dizini için otomatik olarak devre dışı bırakılır.

Tam metin indeksli bir masada, SQL Server Management Studio kullanarak tam metin indeksleme için bir tabloyu manuel olarak devre dışı bırakabilir veya yeniden etkinleştirebilirsiniz.

  1. Sunucu grubunu genişletin, Veritabanlarıgenişletin ve tam metin dizinleme için etkinleştirmek istediğiniz tabloyu içeren veritabanını genişletin.

  2. Tablolargenişletin ve tam metin dizini oluşturma işlemi için devre dışı bırakmak veya yeniden etkinleştirmek istediğiniz tabloya sağ tıklayın.

  3. Full-Text dizini seçin ve ardından Full-Text dizini devre dışı bırak veya Full-Text dizini etkinleştir seçeneğini seçin.

Tablodan tam metin dizini kaldırma

  1. Nesne Gezgini'nde, silmek istediğiniz tam metin dizinine sahip tabloya sağ tıklayın.

  2. seç'i, Full-Text dizinini sil.

  3. İstendiğinde, Tamam'ı seçerek tam metin dizinini silmek istediğinizi onaylayın.