Aracılığıyla paylaş


CONTAINSTABLE (Transact-SQL)

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

Bu sütunlar için kesin veya belirsiz (daha az kesin) eşleşmeler içeren sıfır, bir veya daha fazla satırdan oluşan bir tablo, tek sözcük ve tümceciklerle, sözcüklerin belirli bir mesafedeki yakınlığıyla veya ağırlıklı eşleşmelerle döndürür. CONTAINSTABLEbir Transact-SQL deyiminin SELECT kullanılır ve normal bir tablo adıymış gibi başvurulur. Karakter tabanlı veri türleri içeren tam metin dizinli sütunlarda SQL Server tam metin araması gerçekleştirir.

CONTAINSTABLE , CONTAINS ile aynı tür eşleşmeler için kullanışlıdır ve ile aynı arama koşullarını CONTAINSkullanır.

Öte yandan CONTAINS, kullanan CONTAINSTABLE sorgular, her satır için bir ilgi derecelendirme değeri (RANK) ve tam metin anahtarı (KEY) döndürür. SQL Server tarafından desteklenen tam metin arama biçimleri hakkında bilgi için bkz. Full-Text Aramaile sorgu .

Transact-SQL söz dizimi kuralları

Sözdizimi

CONTAINSTABLE
( table , { column_name | ( column_list ) | * } , ' <contains_search_condition> '
     [ , LANGUAGE language_term ]
  [ , top_n_by_rank ]
)

<contains_search_condition> ::=
    { <simple_term>
    | <prefix_term>
    | <generation_term>
    | <generic_proximity_term>
    | <custom_proximity_term>
    |  <weighted_term>
    }
    | { ( <contains_search_condition> )
    { { AND | & } | { AND NOT | &! } | { OR | | } }
     <contains_search_condition> [ ...n ]
    }

<simple_term> ::=
     { word | "phrase" }
<prefix term> ::=
     { "word*" | "phrase*" }
<generation_term> ::=
     FORMSOF ( { INFLECTIONAL | THESAURUS } , <simple_term> [ , ...n ] )

<generic_proximity_term> ::=
     { <simple_term> | <prefix_term> } { { { NEAR | ~ }
     { <simple_term> | <prefix_term> } } [ ...n ] }

<custom_proximity_term> ::=
  NEAR (
     {
        { <simple_term> | <prefix_term> } [ , ...n ]
     |
        ( { <simple_term> | <prefix_term> } [ , ...n ] )
      [ , <maximum_distance> [ , <match_order> ] ]
     }
       )

      <maximum_distance> ::= { integer | MAX }
      <match_order> ::= { TRUE | FALSE }

<weighted_term> ::=
     ISABOUT
    ( { {
  <simple_term>
  | <prefix_term>
  | <generation_term>
  | <proximity_term>
  }
   [ WEIGHT ( weight_value ) ]
   } [ , ...n ]
    )

Bağımsız değişken

tablo

Tam metin dizini oluşturulmuş bir tablonun adı. tablo bir, iki, üç veya dört bölümden oluşabilir. Bir görünümü sorguladığınızda, yalnızca bir tam metin dizinli temel tablo dahil edilebilir.

tablosu sunucu adı belirtemez ve bağlı sunuculara yönelik sorgularda kullanılamaz.

column_name

Tam metin araması için dizine alınan bir veya daha fazla sütunun adı. Sütunlar char, varchar, nchar, nvarchar, metintüründe olabilir . ntext, resim, xml, varbinaryveya varbinary(max).

column_list

Virgülle ayrılmış birkaç sütunun belirtilebileceğini gösterir. column_list parantez içine alınmalıdır. language_term belirtilmediği sürece, column_list tüm sütunlarının dili aynı olmalıdır.

*

tablodaki tüm tam metin dizinli sütunların verilen arama koşulu için kullanılması gerektiğini belirtir. language_term belirtilmediği sürece, tablonun tüm sütunlarının dili aynı olmalıdır.

DIL language_term

Kaynakları sözcük kesme, kök oluşturma ve eş anlamlılar sözlüğü ile gürültü sözcüğünü (veya stopword) kaldırma için sorgunun bir parçası olarak kullanılan dil. Bu parametre isteğe bağlıdır ve bir dilin yerel ayar tanımlayıcısına (LCID) karşılık gelen bir dize, tamsayı veya onaltılık değer olarak belirtilebilir. language_term belirtilirse, temsil ettiği dil arama koşulunun tüm öğelerine uygulanır. Değer belirtilmezse, sütun tam metin dili kullanılır.

Farklı dillerdeki belgeler tek bir sütunda ikili büyük nesneler (BLOB) olarak birlikte depolanıyorsa, belirli bir belgenin yerel ayar tanımlayıcısı (LCID), içeriğini dizine almak için hangi dilin kullanıldığını belirler. Böyle bir sütunu sorguladığınızda, iyi bir eşleşme olasılığını artırmak için belirtin LANGUAGE <language_term> .

Dize olarak belirtildiğinde, language_termalias uyumluluk görünümündeki sütun değerine karşılık gelir. Dize, 'language_term' içinde olduğu gibi tek tırnak içine alınmalıdır. Tamsayı olarak belirtildiğinde, language_term dili tanımlayan gerçek LCID'dir. Onaltılık değer olarak belirtildiğinde, language_term 0x olur ve bunu LCID'nin onaltılık değeri izler. Onaltılık değer, baştaki sıfırlar da dahil olmak üzere sekiz basamağı 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.

Belirtilen dil geçerli değilse veya bu dile karşılık gelen hiçbir kaynak yüklü değilse, SQL Server bir hata döndürür. Nötr dil kaynaklarını kullanmak için 0x0 language_termolarak belirtin.

top_n_by_rank

Yalnızca n en yüksek dereceli eşleşmelerin azalan sırada döndürüldüğünü belirtir. Yalnızca nbir tamsayı değeri belirtildiğinde geçerlidir. top_n_by_rank diğer parametrelerle birleştirilirse, sorgu tüm koşullarla eşleşen satır sayısından daha az satır döndürebilir. top_n_by_rank yalnızca en ilgili isabetleri geri çekerek sorgu performansını artırmanıza olanak tanır.

<contains_search_condition>

column_name içinde aranacak metni ve eşleşme koşullarını belirtir. Arama koşulları hakkında bilgi için bkz. CONTAINS.

Açıklamalar

Tam metin önkoşulları ve işlevleri, koşulda FROM yer alan tek bir tabloda çalışır. Birden çok tabloda arama yapmak için yan tümcenizdeki FROM birleştirilmiş tabloyu kullanarak iki veya daha fazla tablonun ürünü olan bir sonuç kümesinde arama yapın.

Döndürülen tabloda tam metin anahtar değerleri içeren adlı KEY bir sütun vardır. Tam metin dizinli her tabloda, değerlerin benzersiz olması garanti edilen bir sütun vardır ve sütunda KEY döndürülen değerler, arama koşulunda belirtilen seçim ölçütleriyle eşleşen satırların tam metin anahtar değerleridir. TableFulltextKeyColumn işlevinden OBJECTPROPERTYEX alınan özelliği, bu benzersiz anahtar sütununun kimliğini sağlar. Tam metin dizininin sys.fulltext_indexes tam metin anahtarıyla ilişkili sütunun kimliğini almak için daha fazla bilgi için bkz. sys.fulltext_indexes.

İstediğiniz satırları özgün tablodan almak için satırlarla CONTAINSTABLE bir birleşim belirtin. kullanan FROM bir SELECT deyiminin CONTAINSTABLE tipik yan tümcesi biçimi:

SELECT select_list
FROM table AS FT_TBL
INNER JOIN CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL
   ON FT_TBL.unique_key_column = KEY_TBL.[KEY];

tarafından CONTAINSTABLE üretilen tablo adlı RANKbir sütun içerir. Sütun RANK , her satır için bir satırın seçim ölçütlerine ne kadar uygun olduğunu gösteren bir değerdir (0 ile 1000 arasında). Bu derece değeri genellikle deyiminde şu yollardan SELECT birinde kullanılır:

  • Tablodaki ORDER BY ilk satırlar olarak en yüksek derecelendirmeli satırları döndürme yan tümcesinde.

  • Her satıra atanan derecelendirme değerini görmek için seçme listesinde.

İzinler

Yürütme izinleri yalnızca tabloda veya başvuruda bulunulmuş tablonun sütunlarında uygun SELECT ayrıcalıklara sahip kullanıcılar tarafından kullanılabilir.

Örnekler

A. Temel örnek

Aşağıdaki örnek, üç ülkeyi/bölgeyi ve bayraklarındaki renkleri listeleyerek iki sütundan oluşan basit bir tablo oluşturur ve doldurur. Tabloda tam metin kataloğu ve dizini oluşturur ve doldurur. CONTAINSTABLE Ardından söz dizimi gösterilmektedir. Bu örnekte, arama değeri birden çok kez karşılandığında derece değerinin nasıl daha yüksek arttığı gösterilmektedir. Son sorguda, hem yeşil hem de siyah içeren Tanzanya, sorgulanan renklerden yalnızca birini içeren İtalya'dan daha yüksek bir dereceye sahiptir.

CREATE TABLE Flags
(
    CountryOrRegion NVARCHAR (30) NOT NULL,
    FlagColors VARCHAR (200)
);

CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(CountryOrRegion);

INSERT INTO Flags VALUES ('France', 'Blue and White and Red');
INSERT INTO Flags VALUES ('Italy', 'Green and White and Red');
INSERT INTO Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');

SELECT * FROM Flags;
GO

CREATE FULLTEXT CATALOG TestFTCat;

CREATE FULLTEXT INDEX ON Flags (FlagColors) KEY INDEX FlagKey
    ON TestFTCat;
GO

SELECT * FROM Flags;

SELECT *
FROM CONTAINSTABLE (Flags, FlagColors, 'Green')
ORDER BY RANK DESC;

SELECT *
FROM CONTAINSTABLE (Flags, FlagColors, 'Green or Black')
ORDER BY RANK DESC;

B. Sıralama değerlerini döndürme

Aşağıdaki örnek , frameveya wheelsözcüklerini tireiçeren tüm ürün adlarını arar ve her sözcük için farklı ağırlıklar verilir. Bu arama ölçütlerine uyan döndürülen her satır için, eşleşmenin göreli yakınlığı (derecelendirme değeri) gösterilir. Buna ek olarak, en yüksek derecelendirme satırları önce döndürülür.

USE AdventureWorks2022;
GO

SELECT FT_TBL.Name,
       KEY_TBL.RANK
FROM Production.Product AS FT_TBL
     INNER JOIN CONTAINSTABLE (
        Production.Product,
        Name,
        'ISABOUT (frame WEIGHT (.8), wheel WEIGHT (.4), tire WEIGHT (.2) )'
     ) AS KEY_TBL
     ON FT_TBL.ProductID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;
GO

C. Belirtilen değerden büyük derece değerleri döndürme

için geçerlidir: SQL Server 2012 (11.x) ve sonraki sürümler.

Aşağıdaki örnek, tabloda birbirini aramak ve bracket kapatmak reflector için Production.Document NEAR kullanır. Yalnızca derece değeri 50 veya daha yüksek olan satırlar döndürülür.

USE AdventureWorks2022;
GO

SELECT DocumentNode,
       Title,
       DocumentSummary
FROM Production.Document AS DocTable
     INNER JOIN CONTAINSTABLE (Production.Document, Document, 'NEAR(bracket, reflector)') AS KEY_TBL
         ON DocTable.DocumentNode = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 50
ORDER BY KEY_TBL.RANK DESC;
GO

Not

Tam metin sorgusu en fazla uzaklık olarak bir tamsayı belirtmezse, yalnızca boşluğu 100 mantıksal terimden büyük olan isabetleri içeren bir belge gereksinimleri karşılamaz NEAR ve derecelendirmesi 0'dır.

D. top_n_by_rank kullanarak ilk beş sıralanmış sonuç döndür

Aşağıdaki örnek, sütunun sözcüğün veya sözcüğün Descriptionaluminum yanında lightlightweightyer aldığı ilk beş ürünün açıklamasını döndürür.

USE AdventureWorks2022;
GO

SELECT FT_TBL.ProductDescriptionID,
       FT_TBL.Description,
       KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL
     INNER JOIN CONTAINSTABLE (Production.ProductDescription, Description,
        '(light NEAR aluminum) OR (lightweight NEAR aluminum)', 5) AS KEY_TBL
     ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY];
GO

E. Dİl bağımsız değişkenini belirtin

Aşağıdaki örnekte LANGUAGE bağımsız değişkeninin kullanılması gösterilmektedir.

USE AdventureWorks2022;
GO

SELECT FT_TBL.ProductDescriptionID,
       FT_TBL.Description,
       KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL
     INNER JOIN CONTAINSTABLE (Production.ProductDescription, Description,
        '(light NEAR aluminum) OR (lightweight NEAR aluminum)',
        LANGUAGE N'English', 5) AS KEY_TBL
     ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY];
GO

Not

top_n_by_rank kullanmak için LANGUAGE language_term bağımsız değişkeni gerekli değildir .