Aracılığıyla paylaş


TAM METIN DIZINI OLUŞTUR (Transact-SQL)

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

SQL Server'da bir veritabanında bir tabloda veya indekslenmiş görünümde tam metin bir indeks oluşturur. Her tablo veya indeksli görünüm için yalnızca bir tam metin indeks izin verilir ve her tam metin indeks tek bir tablo veya indekslenmiş görünüm için geçerlidir. Tam metin bir indeks en fazla 1024 sütun içerebilir.

Transact-SQL söz dizimi kuralları

Sözdizimi

CREATE FULLTEXT INDEX ON table_name
   [ ( { column_name
             [ TYPE COLUMN type_column_name ]
             [ LANGUAGE language_term ]
             [ STATISTICAL_SEMANTICS ]
        } [ , ...n ]
      ) ]
    KEY INDEX index_name
    [ ON <catalog_filegroup_option> ]
    [ WITH ( <with_option> [ , ...n ] ) ]
[;]

<catalog_filegroup_option>::=
 {
    fulltext_catalog_name
 | ( fulltext_catalog_name , FILEGROUP filegroup_name )
 | ( FILEGROUP filegroup_name , fulltext_catalog_name )
 | ( FILEGROUP filegroup_name )
 }

<with_option>::=
 {
   CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
 | STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
 | SEARCH PROPERTY LIST [ = ] property_list_name
 }

Arguments

table_name

Tam metin indeksinde yer alan sütun veya sütunları içeren tablonun veya indekslenmiş görünümün adı.

column_name

Tam metin indeksinde yer alan sütunun adı. Tam metin araması için yalnızca char, varchar, nchar, nvarchar, text, ntext, image, xml ve varbinary(max) tipli sütunlar indekslenebilir. Birden fazla sütun belirtmek için column_name cümlesini aşağıdaki gibi tekrarlayın:

table_name (column_name1 [...], column_name2 [...]) ...

TIP SÜTUNU type_column_name

Bir varbinary(max) veya görüntü belgesi için belge tipini saklamak için kullanılan type_column_name tablo sütununun adını belirtir. Bu sütun, tip sütunu olarak bilinir ve kullanıcı tarafından sağlanan bir dosya uzantısı (.doc, .pdf, .xlsve benzeri) içerir. Tip sütunu char, nchar, varchar veya nvarchar tipinde olmalıdır.

TYPE COLUMN type_column_name yalnızca column_namevarbinary(max) veya görüntü sütunu belirtiyorsa, burada veri ikili veri olarak saklanıyorsa; aksi takdirde, SQL Server hata döndürür.

Uyarı

Indeksleme zamanında, Full-Text Motoru, her tablo satırının tip sütunundaki kısaltmayı kullanarak column_name'de belge için hangi tam metin arama filtresinin kullanılacağını belirler. Filtre, belgeyi ikili bir akış olarak yükler, biçimlendirme bilgilerini kaldırır ve metni belgeden kelime kesici bileşenine gönderir. Daha fazla bilgi için bkz. Arama Için Filtreleri Yapılandırma ve Yönetme.

DIL language_term

column_name'de depolanan verilerin dili.

language_term isteğe bağlıdır ve bir dilin yerel tanımlayıcısına (LCID) karşılık gelen bir dize, tam sayı veya onaltılık değer olarak belirtilebilir. Herhangi bir değer belirtilmemişse, SQL Server örneğinin varsayılan dili kullanılır.

Eğer language_term belirtilirse, temsil ettiği dil char,nchar, varchar, nvarchar, nvarchar, text ve ntext sütunlarında depolanan verileri indekslemek için kullanılır. Bu dil, sütuna karşı tam metin önleminin parçası olarak belirtilmemişse, sorgu zamanında varsayılan dil olarak language_term kullanılır.

Bir dizi olarak belirtildiğinde, language_term sistem tablosunda sys.syslanguages alias sütun değerine karşılık gelir. Dizin, 'language_term' harfindeki gibi tek tırnak içinde olması gerekir. Tamsayı olarak belirtildiğinde, language_term dili tanımlayan gerçek LCID'dir. Onaltılık değer olarak belirtildiğinde, language_term0x ardından LCID'nin altılık değeri gelir. Hex değeri, öndeki sıfırlar dahil olmak üzere sekiz haneyi aşmamalıdır.

Değer çift baytlık karakter kümesi (DBCS) biçimindeyse, SQL Server bunu Unicode'a dönüştürür.

Kelime kırıcı ve stem gibi kaynaklar, language_term olarak belirtilen dil için etkinleştirilmelidir. Eğer bu kaynaklar belirtilen dili desteklemiyorsa, SQL Server hata döndürür.

Microsoft SQL Server örneğinin varsayılan tam metin dili hakkında bilgilere erişmek için sp_configure saklanan prosedürü kullanın. Daha fazla bilgi için sp_configure (Transact-SQL) bölümüne bakınız.

Birden fazla dilde metin verisi içeren BLOB olmayan ve XML olmayan sütunlar için veya sütunda depolanan metnin dili bilinmiyorsa, nötr (0x0) dil kaynağını kullanmak uygun olabilir. Ancak önce nötr (0x0) dil kaynağını kullanmanın olası sonuçlarını anlamalısınız. Nötr (0x0) dil kaynağının kullanımının olası çözümleri ve sonuçları hakkında bilgi için bkz. Bir Full-Text Index Oluştururken Bir Dil Seç.

XML veya BLOB tipi sütunlarda saklanan belgeler için, belge içindeki dil kodlaması indeksleme sırasında kullanılır. Örneğin, XML sütunlarında, xml:lang XML belgelerindeki öznitelik dili tanımlar. Sorgu zamanında, language_term'de belirtilen değer, tam metin sorgular için varsayılan dil olur, ancak language_term tam metin sorgusunun bir parçası olarak belirtilmedikçe.

STATISTICAL_SEMANTICS

Geçerlidir: SQL Server (SQL Server 2012 (11.x) ve sonrası)

İstatistiksel anlamsal indekslemenin bir parçası olan ek anahtar ifadeler oluşturur ve benzerlik indekslerini belgeler. Daha fazla bilgi için bkz. semantik arama (SQL Server) .

ANAHTAR İNDEKS index_name

table_name'daki benzersiz anahtar indeksin adı. ANAHTAR EndİNKSİ benzersiz, tek anahtarlı, geçersiz bir sütun olmalıdır. Tam metin benzersiz anahtar için en küçük benzersiz anahtar indeksini seçin. En iyi performans için, tam metin anahtarı için tamsayı veri tipi öneriyoruz.

fulltext_catalog_name

Tam metin indeks için kullanılan tam metin katalog. Katalog zaten veritabanında var olmalı. Bu yan tümce isteğe bağlıdır. Belirtilmemişse, varsayılan bir katalog kullanılır. Varsayılan katalog yoksa, SQL Server hata döndürür.

DOSYA GRUBU filegroup_name

Belirtilen dosya grubunda belirtilen tam metin indeksi oluşturur. Dosya grubu zaten var olmalıdır. FILEGROUP cümlesi belirtilmemişse, tam metin indeks bölünmemiş bir tablo için temel tablo veya görünüm ile aynı dosya grubuna, ya da bölümlenmiş bir tablo için ana dosya grubuna yerleştirilir.

CHANGE_TRACKING [ = ] { MANUEL | AUTO | KAPALI [ , NÜFUS YOK ] }

Tam metin indeksiyle kapsanan tablo sütunlarında yapılan değişikliklerin (güncellemeler, silmeler veya eklemeler) SQL Server tarafından tam metin indeksine iletedilip taşınmayacağını belirtir. WRITETEXT ve UPDATETEXT yoluyla yapılan veri değişiklikleri tam metin indeksinde yansıtılmazdır ve değişiklik takibi ile algılanmaz.

  • EL İLE

    İzlenen değişikliklerin ALTER FULLTEXT INDEX ... çağrısı ile manuel olarak yayılması gerektiğini belirtir BAŞLAT GÜNCELLEME NÜFUS Transact-SQL (manuel nüfus). BU Transact-SQL deyimini düzenli aralıklarla çağırmak için SQL Server Agent'ı kullanabilirsiniz.

  • AUTO

    İzlenen değişikliklerin, veri temel tabloda (otomatik popülasyon) değiştirildikçe otomatik olarak yayıldığını belirtir. Değişiklikler otomatik olarak yayılmış olsa da, bu değişiklikler tam metin indeksinde hemen yansıtılmayabilir. AUTO varsayılan özelliktir.

KAPALI [ , nüfus yok ]

SQL Server'ın indekslenen verideki değişikliklerin listesini tutmadığını belirtir. HİÇ NÜFUS belirtilmediğinde, SQL Server oluşturulduktan sonra indeks tamamen doldurulur.

NÜFUS YOK seçeneği yalnızca CHANGE_TRACKING kapalı olduğunda kullanılabilir. HİÇ NÜFUS belirtilmediğinde, SQL Server oluşturulduktan sonra bir indeks doldurmaz. Indeks, yalnızca kullanıcı ALTER FULL TEXT INDEX komutunu START FULL POPULATION veya START INCREMENTAL POPULATION maddesiyle çalıştırdıktan sonra doldurulur.

DURDURMA LİSTEESI [ = ] { KAPALI | SISTEM | stoplist_name }

Tam metin bir durak listesini indeksle ilişkilendirir. Indeks, belirtilen durak listesine dahil olan hiçbir tokenla doldurulmaz. STOPLIST belirtilmemişse, SQL Server sistemin tam metin durdurma listesini indeksle ilişkilendirir.

  • OFF

    Tam metin indeksiyle hiçbir durdurma listesi ilişkilendirilmediğini belirtir.

  • SYSTEM

    Bu tam metin indeks için varsayılan tam metin sistemi STOPLIST kullanılmasını belirtir.

  • stoplist_name

    Tam metin indeksiyle ilişkilendirilecek durak listesinin adını belirtir.

ÖZELLIK LISTESINI ARAMAK [ = ] property_list_name

Geçerlidir: SQL Server (SQL Server 2012 (11.x) ve sonrası)

Bir arama özellik listesini indeksle ilişkilendirir.

  • OFF

    Tam metin indeksle hiçbir özellik listesinin ilişkilendirilmediğini belirtir.

  • property_list_name

    Tam metin indeksiyle ilişkilendirilecek arama özellik listesinin adını belirtir.

Açıklamalar

XML sütunlarında, XML öğelerinin içeriğini indeksleyen ancak XML işaretlemesini görmezden gelen tam metin bir indeks oluşturabilirsiniz. Özellik değerleri, sayısal değerler olmadıkça tam metin olarak indekslenir. Element etiketleri token sınırları olarak kullanılır. İyi oluşturulmuş XML veya HTML belgeleri ve birden fazla dil içeren parçalar desteklenir. Daha fazla bilgi için bkz. XML Sütunlarıyla arama Full-Text kullanma.

Endeks anahtarı sütununun tam sayı veri tipi olmasını öneriyoruz. Bu, sorgu yürütme zamanında optimizasyonlar sağlar.

CREATE FULL TEXT INDEX bir kullanıcı işleminin içine yerleştirilemez. Bu ifade kendi örtük işleminde çalıştırılmalıdır.

Tam metin indeksler hakkında daha fazla bilgi için Oluştur ve Full-Text İndeksleri Yönet bölümünü inceleyebilirsiniz.

Değişim takibi ile NOT POPÜLASYON parametresi arasındaki etkileşimler

Tam metin indeksinin doldurulması, değişim takibi etkinleştirilip etkinleştirilmediğine ve ALTER FULLTEXT INDEX ifadesinde WITH NO POPULATION belirtilmesine bağlıdır. Aşağıdaki tablo, etkileşimlerinin sonucunu özetlemektedir.

Change Tracking NÜFUSSUZ Result
Etkinleştirilmedi Belirtilmemiş Tam bir popülasyon indeks üzerinde yapılır.
Etkinleştirilmedi Belirtilen Indeksin popülasyonu, TAM METİN EndİNKSİNİ DEĞIŞTIRİNE KADAR GERÇEKLEŞMEZ... BAŞLANGIÇ NÜFUS beyannamesi yayımlanır.
Etkinleştirildi Belirtilen Bir hata ortaya çıkar ve indeks değiştirilmez.
Etkinleştirildi Belirtilmemiş Tam bir popülasyon indeks üzerinde yapılır.

Tam metin indekslerin doldurulması hakkında daha fazla bilgi için Nüfus Full-Text İndeksleri sayfasına bakınız.

Permissions

Kullanıcının REFERENCES tam metin katalogda ve ALTER tabloda veya indekslenmiş görünümde iznine sahip olmalı, sabit sunucu rolünün üyesi sysadmin olmalı, db_ownerdb_ddladmin ya da sabit veritabanı rollerinde bulunmalıdır.

Belirtilmişse SET STOPLIST , kullanıcının belirtilen durak listesinde REFERENCES iznine sahip olması gerekir. DURDURMA Listesi'nin sahibi bu izni verebilir.

Uyarı

Kamuya, SQL Server ile birlikte gönderilen varsayılan durak listesine REFERANS izni verilir.

Örnekler

A. Benzersiz bir indeks, tam metin katalog ve tam metin bir indeks oluşturun

Aşağıdaki örnek, AdventureWorks2025 örnek veritabanının tablosunun sütununda JobCandidateID benzersiz bir indeks HumanResources.JobCandidate oluşturur. Örnek daha sonra varsayılan tam metin katalog oluşturur, ft. Son olarak, örnek katalog ve sistem durak listesi kullanarak Resume sütunda ft tam metin bir indeks oluşturur.

CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)
   KEY INDEX ui_ukJobCand
   WITH STOPLIST = SYSTEM;
GO

B. Birkaç tablo sütununda tam metin bir indeks oluşturun

Aşağıdaki örnek, production_catalogAdventureWorks örnek veritabanında bir tam metin kataloğu oluşturur. Örnek daha sonra bu yeni kataloğu kullanan bir tam metin dizini oluşturur. Tam metin indeksiReviewerNameEmailAddress, ve Comments sütunlarında yer alır.Production.ProductReview Her sütun için örnek, sütunlardaki verilerin dili olan İngilizce'nin 1033LCID'sini belirtir. Bu tam metin indeks, mevcut benzersiz bir anahtar indeksi olan PK_ProductReview_ProductReviewID. Önerilen gibi, bu indeks anahtarı tam sayı sütununda, ProductReviewID.

CREATE FULLTEXT CATALOG production_catalog;
GO

CREATE FULLTEXT INDEX ON Production.ProductReview (
    ReviewerName LANGUAGE 1033,
    EmailAddress LANGUAGE 1033,
    Comments LANGUAGE 1033
) KEY INDEX PK_ProductReview_ProductReviewID ON production_catalog;
GO

C. Arama özellik listesini doldurmadan tam metin bir indeks oluşturun

Aşağıdaki örnek, Title , , ve DocumentSummary tablodaki sütunlarda tam metin bir indeks DocumentProduction.Documentoluşturur. Örnek, sütunlardaki verilerin dili olan İngilizce'nin 1033LCID'sini belirtir. Bu tam metin indeks, varsayılan tam metin kataloğunu ve mevcut benzersiz anahtar indeksi olan PK_Document_DocumentID. Önerilen gibi, bu indeks anahtarı tam sayı sütununda, DocumentID.

Örnek, SYSTEM durak listesini belirtir. Ayrıca bir arama özellik listesi belirtir; DocumentPropertyListbu özellik listesini oluşturan bir örnek için bkz. ARAMA ÖZELLIK LISTESI OLUŞTUR (Transact-SQL)

Örnek, nüfus olmadan değişiklik takibinin kapalı olduğunu belirtir. Daha sonra, yoğun olmayan saatlerde, örnek yeni indekste tam bir popülasyonu başlatmak ve otomatik değişiklik takibi etkinleştirmek için ALTER FULL TEXT INDEX ifadesi kullanır.

CREATE FULLTEXT INDEX ON Production.Document (
    Title LANGUAGE 1033,
    DocumentSummary LANGUAGE 1033,
    Document TYPE COLUMN FileExtension LANGUAGE 1033
) KEY INDEX PK_Document_DocumentID
WITH STOPLIST = SYSTEM,
    SEARCH PROPERTY LIST = DocumentPropertyList,
    CHANGE_TRACKING OFF,
    NO POPULATION;
GO

Daha sonra yoğun olmayan bir zamanda dizin doldurulur:

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO

Ayrıca bakınız