sys.dm_fts_parser (Transact-SQL)

Şunun için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'teki SQL veritabanı

Verilen bir kelime kırıcı, sözlük sözlüğü ve durdurma listesi kombinasyonunu sorgu dizisi girdisine uyguladıktan sonra nihai tokenizasyon sonucunu döndürür. Tokenizasyon sonucu, belirtilen sorgu dizisi için Full-Text Engine'in çıktısına eşdeğerdir.

sys.dm_fts_parser dinamik bir yönetim fonksiyonudur.

Syntax

sys.dm_fts_parser (
    'query_string'
    , lcid
    , stoplist_id
    , accent_sensitivity
)

Argümanlar

query_string

Çözümlemek istediğiniz soru. query_string, sözdizimi desteği içeren bir dizi zinciri olabilir. Örneğin, çekim biçimleri, bir sözlük sözlüğü ve mantıksal operatörler ekleyebilirsiniz.

lcid

query_string ayrıştırmak için kullanılacak kelime kesicinin yerel tanımlayıcısı (LCID).

stoplist_id

Eğer varsa, lcid ile tanımlanan kelime kırıcı tarafından kullanılacak durak listesinin kimliği. stoplist_idiçsel. 'NULL' belirtirseniz, durak listesi kullanılmaz. 0 belirtirseniz, sistem STOPLIST kullanılır.

Stoplist ID, bir veritabanı içinde benzersizdir. Belirli bir tabloda tam metin bir indeks için stoplist ID'sini almak için sys.fulltext_indexes katalog görünümünü kullanın.

accent_sensitivity

Tam metin aramasının diyakritik değerlere karşı hassas mı yoksa duyarsız mı olduğunu kontrol eden boolean değeri. accent_sensitivitybittir ve aşağıdaki değerlerden birine sahiptir:

Değer Aksan hassasiyeti...
0 Duyarsız

"Café" ve "café" gibi kelimeler aynı şekilde ele alınır.
1 Duyarlı

"Café" ve "café" gibi kelimeler farklı şekilde ele alınır.

Note

Tam metin katalogda bu değerin mevcut ayarını görmek için aşağıdaki Transact-SQL ifadesini çalıştırın: SELECT fulltextcatalogproperty('<catalog_name>', 'AccentSensitivity');.

Tablo geri getirildi

Sütun adı Veri türü Description
keyword 1 varbinary(128) Verilen bir anahtar kelimenin onaltılık temsili, kelime kesici tarafından geri getirilir. Bu temsil, anahtar kelimeyi tam metin indeksinde depolamak için kullanılır. Bu değer insan tarafından okunabilir değildir, ancak belirli bir anahtar kelimeyi, sys.dm_fts_index_keywords ve sys.dm_fts_index_keywords_by_document gibi tam metin indeks içeriğini döndüren diğer dinamik yönetim görünümlerinin verdiği çıktıyla ilişkilendirmek için faydalıdır.
group_id int Belirli bir terimin oluşturulduğu mantıksal grubu ayırt etmek için faydalı olan bir tamsayı değeri içerin. Örneğin, Server AND DB OR FORMSOF(THESAURUS, DB) İngilizce'de aşağıdaki group_id değerleri üretir:

1: Sunucu
2: DB
3: DB
phrase_id int Kelime kırıcı tarafından alternatif bileşik kelimeler biçimlerinin, örneğin tam metin gibi durumlarda çıkarıldığı durumları ayırt etmek için faydalı olan bir tam sayı değeri içerir. Bazen, bileşik kelimeler ('multi-million') bulunduğunda, kelime kırıcı tarafından alternatif biçimler çıkarılır. Bu alternatif biçimler (ifadeler) bazen ayırt edilmelidir.

Örneğin, multi-million İngilizce'de aşağıdaki phrase_id değerleri üretir:

1 için multi
1 için million
2 için multimillion
occurrence int Ayrıştırma sonucundaki her terimin sırasını gösterir. Örneğin, SQL Server query processor ifadede ifade için oluşum, İngilizce'de ifadedeki terimler için aşağıdaki rastlaşma değerlerini içerir:

1 için SQL
2 for Server
3 için query
4 için processor
special_term nvarchar(4000) Kelime kırıcı tarafından verilen terimin özellikleri hakkında bilgi içerir, bunlardan biri:

- Tam eşleşme
- Gürültü kelimesi
- Cümlenin sonu
- Paragrafın sonu
- Bölümün sonu
display_term nvarchar(4000) Anahtar kelimenin insan tarafından okunabilir biçimini içerir. Tam metin indeksinin içeriğine erişmek için tasarlanmış fonksiyonlarda olduğu gibi, bu gösterilen terim denormalizasyon sınırlaması nedeniyle orijinal terimle aynı olmayabilir. Ancak, orijinal girdiden tanımanıza yardımcı olacak kadar hassas olmalıdır.
expansion_type int Belirli bir terimin genişleme doğası hakkında bilgi içerir, bunlardan biri:

0 = Tek kelime harve
2 = Çekimsel genişleme
4 = Thearurus genişletilmesi/yerine geçmesi

Örneğin, tezaurus'un run'ı 'run'ın bir genişlemesi jogolarak tanımladığı bir durumu ele alalım:

<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>

Bu terim FORMSOF (FREETEXT, run) aşağıdaki çıktıyı üretir:

run expansion_type = 0 ile
runs ile expansion_type = 2
running ile expansion_type = 2
ran ile expansion_type = 2
jog = expansion_type 4 ile
source_term nvarchar(4000) Belirli bir terimin oluşturulduğu veya analiz edildiği terim veya ifade. Örneğin, bir '"word breakers" AND stemmers' sorgu İngilizcede aşağıdaki source_term değerleri üretir:

word breakers display_termword
word breakers display_termbreakers
stemmers display_termstemmers

10xFF , bir dosyanın veya veri setinin sonunu gösteren özel karakteri temsil eder.

Açıklamalar

sys.dm_fts_parser CONTAINS ve FREETEXT gibi tam metin önlemlerinin sözdizimi ve özelliklerini, CONTAINSTABLE ve FREETEXTTABLE gibi fonksiyonları destekler.

Özel karakterleri ayrıştırmak için Unicode kullanın

Bir sorgu dizesini ayrıştırdığınızda, sys.dm_fts_parser bağlı olduğunuz veritabanının derlemesini kullanır, sorgu dizesini Unicode olarak belirtmezseniz. Bu nedenle, ü veya ç gibi özel karakterler içeren Unicode dışı bir dizede çıktı veritabanının derlemesine bağlı olarak beklenmedik olabilir. Veritabanı derlemesinden bağımsız olarak bir sorgu dizesini işlemek için, diziye N, N'<query_string>'yani .

Daha fazla bilgi için bkz. C. Bu makalenin ilerleyen bölümlerinde özel karakterler içeren bir dizinin çıktısını gösterin .

Ne zaman kullanılmalı sys.dm_fts_parser

sys.dm_fts_parser hata ayıklama amaçlı güçlü olabilir. Bazı önemli kullanım senaryoları şunlardır:

  • Bir kelime kırıcısının belirli bir girdiyi nasıl ele aldığını anlamak

    Bir sorgu beklenmedik sonuçlar verdiğinde, muhtemel bir neden kelime bozucusunun veriyi ayrıştırıp bozma şeklidir. Kullanarak sys.dm_fts_parser, kelime bozucusunun tam metin indeksine ilettiği sonucu bulursunuz. Ayrıca, tam metin indeksinde aranmayan terimlerin duraforması olduğunu görebilirsiniz. Bir terimin belirli bir dil için durak kelimesi olup olmadığı, fonksiyonda ilan edilen stoplist_id değeriyle belirtilen durak listesinde olup olmamasına bağlıdır.

    Aksan hassasiyeti bayrağı, kelime kesicinin aksan hassasiyet bilgisini göz önünde bulundurarak girdiyi nasıl ayrıştırdığını görmenizi sağlar.

  • Stemmer'ın belirli bir girdide nasıl çalıştığını anlamak için

    Kelime kırıcı ve stimmer'in bir sorgu terimini ve kök biçimlerini nasıl ayrıştırdığını aşağıdaki CONTAINS cümleyi içeren bir veya CONTAINSTABLE sorgu FORMSOF belirterek öğrenebilirsiniz:

    FORMSOF ( INFLECTIONAL, <query_term> )
    

    Sonuçlar, tam metin indeksine hangi terimlerin aktarıldığını gösterir.

  • Tezaurusun girişin tamamını veya kısmen nasıl genişletildiğini veya değiştirildiğini anlamak

    Ayrıca belirtebilirsiniz:

    FORMSOF ( THESAURUS, <query_term> )
    

    Bu sorgu sonuçları, kelime kırıcı ve sözlük sözlüğünün sorgu terimi için nasıl etkileştiğini gösterir. Sözlük sözlüğünden genişletme veya değişiklikleri görebilir ve tam metin indeksine karşı aslında gönderilen sorguyu belirleyebilirsiniz.

    Kullanıcı şu sorunlar çıkarıyorsa:

    FORMSOF ( FREETEXT, <query_term> )
    

    Çekim ve Thesaurus yetenekleri otomatik olarak gerçekleşir.

Önceki kullanım senaryolarına ek olarak, sys.dm_fts_parser tam metin sorgulama ile ilgili birçok diğer sorunu anlamaya ve sorun gidermeye önemli ölçüde yardımcı olabilir.

Permissions

Belirtilen durak listesine izin ve erişim hakkı gerektirir CREATE FULLTEXT CATALOG .

Examples

A. Bir anahtar kelime veya ifade için verilen kelime kırıcısının çıktısını gösterin

Aşağıdaki örnek, İngilizce kelime kesicisinin LCID 1033 olduğu ve aşağıdaki sorgu dizesinde durak listesi olmayan İngilizce kelime kesicisinin kullanımından elde edilen çıktıyı geri getirir:

The Microsoft business analysis

Aksan hassasiyeti devre dışı bırakılmıştır.

SELECT *
FROM sys.dm_fts_parser(' "The Microsoft business analysis" ', 1033, 0, 0);

B. Verilen bir kelime kırıcısının çıktısını durdurma listesi filtreleme bağlamında gösterin

Aşağıdaki örnek, aşağıdaki sorgu dizisinde İngilizce kelime kesici (LCID 1033 olan ve ID'si 77 olan İngilizce durak listesi) kullanımından elde edilen çıktıyı geri getirir:

"The Microsoft business analysis" OR "MS revenue"

Aksan hassasiyeti devre dışı bırakılmıştır.

SELECT *
FROM sys.dm_fts_parser(' "The Microsoft business analysis"  OR " MS revenue" ', 1033, 77, 0);

C. Özel karakterler içeren bir dizinin çıktısını göster

Aşağıdaki örnek, aşağıdaki Fransızca diziyi ayrıştırmak için Unicode kullanır:

français

Örnek, Fransızca dili 1036için LCID ve kullanıcı tanımlı bir durak listesinin kimliğini belirtir, 5. Aksan hassasiyeti etkinleştirildi.

SELECT *
FROM sys.dm_fts_parser(N'français', 1036, 5, 1);