Considerazioni sull'uso del motore di ricerca SQL Server Full-Text per la lingua giapponese

Questo articolo descrive le considerazioni che si applicano quando si usa il motore di ricerca SQL Server Full-Text per la lingua giapponese.

Si applica a: SQL Server
Numero KB originale: 2252955

Introduzione

Nella lingua giapponese, una frase può essere costituita da due o più parole senza spazi tra tali parole. In Microsoft SQL Server, quando si usa il motore di ricerca SQL Server Full-Text per eseguire una ricerca di prefisso per una frase giapponese, il motore di ricerca Full-Text non considera la frase come un termine prefisso. Al contrario, il motore di ricerca Full-Text considera la frase come termini di parola. Ciò è dovuto al fatto che una parola viene definita come stringa di caratteri senza spazi o punteggiatura. Inoltre, il motore di ricerca funziona solo in modalità di corrispondenza del prefisso. Il motore di ricerca non funziona in modalità di corrispondenza suffisso.

Ulteriori informazioni

Ad esempio, si crea una tabella e si inseriscono alcune frasi giapponesi eseguendo le istruzioni seguenti in SQL Server:

CREATE TABLE test(c1 int PRIMARY KEY,c2 nvarchar(255))

INSERT test VALUES(1,N'添付テスト')
INSERT test VALUES(2,N'Fw: テスト')
INSERT test VALUES(3,N'KK-Information:テスト')
INSERT test VALUES(4,N'[Q] ポリシーテスト')
INSERT test VALUES(5,N'KK-Information:タイトルフィルタテスト2')
INSERT test VALUES(6,N'テスト')
INSERT test VALUES(7,N'フィルタテスト3')
INSERT test VALUES(8,N'テストフィルタ1')
INSERT test VALUES(9,N'RE: テストメール')
INSERT test VALUES(10,N'テストメール')
INSERT test VALUES(11,N'White Listテスト')
INSERT test VALUES(12,N'フィルタリングテスト')

CREATE FULLTEXT CATALOG test AS DEFAULT;
GO

CREATE FULLTEXT INDEX ON test(c2) KEY INDEX PK__<IndexName>;
GO

Eseguire quindi le tre query seguenti:

  • Query 1

    SELECT * FROM test WHERE CONTAINS(c2, N'テスト')
    

    Il risultato della query 1 è il seguente:

    c1c2

    2Fw: テスト
    3KK-Information:テスト
    6テスト

  • Query 2

    SELECT * FROM test WHERE CONTAINS(c2, 'テスト*')
    

    Il risultato della query 2 è il seguente:

    c1c2
    2 Fw: テスト
    3 KK-Information:テスト
    6 テスト
    8 テストフィルタ1
    9 RE: テストメール
    10 テストメール

  • Query 3

    SELECT * FROM test WHERE CONTAINS(c2, '*テスト*')
    

    Il risultato della query 3 è il seguente:

    c1c2
    2 Fw: テスト
    3 KK-Information:テスト
    6 テスト
    8 テストフィルタ1
    9 RE: テストメール
    10 テストメール

    Dai risultati delle query è possibile notare che il risultato della query 2 è lo stesso del risultato della query 3 perché la query Full-Text non funziona nella modalità di corrispondenza dei suffissi. Inoltre, テスト è un token diverso da ポリシーテスト o nelle テスト corrispondenze.

    Per tokenizzare le frasi, è necessario usare un word breaker per la famiglia di lingue. I breaker di lavoro usano spazi e altri segni per riconoscere le frasi. Di conseguenza, alcune frasi non possono essere riconosciute dal word breaker e non possono essere cercate usando Full-Text motore nella lingua giapponese. Per altre informazioni sui word breaker, vedere l'argomento Word Breakers and Stemmers nella sezione Riferimento.

    La procedura consigliata per usare il motore di ricerca Full-Text nella lingua giapponese consiste nel testare le frasi per verificare se le frasi sono interessate dalla limitazione. Se una frase è costituita da parole senza spazi, non è possibile usare la funzionalità Full-Text per cercare la frase. È invece possibile usare la parola chiave LIKE insieme ai caratteri jolly. Tuttavia, le prestazioni dell'operazione like sono inferiori alle prestazioni della ricerca Full-Text. È necessario considerare l'effetto sulle prestazioni per l'applicazione.

    Di seguito sono riportate alcune query di esempio della like parola chiave per cercare frasi.

  • Query 4

    SELECT * FROM test WHERE c2 like 'テスト%'
    

    Il risultato è simile al seguente:

    c1c2
    6 テスト
    8 テストフィルタ1
    10 テストメール

  • Query 5

    SELECT * FROM test WHERE c2 like '%テスト%'
    

    Il risultato è simile al seguente:

    c1c2
    1 添付テスト
    2 Fw: テスト
    3 KK-Information:テスト
    4 [Q] ポリシーテスト
    5 KK-Information:タイトルフィルタテスト2
    6 テスト
    7 テストフィスタテスス3
    8 テストテススフィスタ1
    9 RE: テストテススメース
    10 テストテススメース
    11 テスト
    12 フィルタリングテスト

Nota

Se si usa il motore di ricerca Full-Text in SQL Server, è possibile trovare altre informazioni sul contenuto di un indice full-text usando la query seguente:

SELECT * FROM sys.dm_fts_index_keywords(db_id('test'), object_id('test'))
GO

Il risultato è simile al seguente:

parola chiave display_term column_id document_count
0x00660077 fw 2 1
0x0069006E0066006F0072006D006100740069006F006E informazioni 2 2
0x006B006B kk 2
0x006C00690073007430C630B930C8 listテスス 2 1
0x00770068006900740065 bianco 2 1
0x30BF30A430C830EB30D530A330EB30BF30C630B930C80032 タイススフィスタテスス2 2 1
0x30C630B930C8 テスス 2 3
0x30C630B930C830D530A330EB30BF0031 テススフィスタ1 2 1
0x30C630B930C830E130FC30EB テススメース 2 2
0x30D530A330EB30BF30C630B930C80033 フィスタテスス3 2 1
0x30D530A330EB30BF30EA30F330B030C630B930C8 フィスタスングテスス 2 1
0x30DD30EA30B730FC30C630B930C8 ポスーテスス 2 1
0x6DFB4ED830C630B930C8 添付テスス 2 1
0xFF FINE DEL FILE 2 12
(14 righe interessate)

Nel risultato dell'esempio, solo tre righe contengono la parola テスト." Il motore di ricerca Full-Text considera la parola "テスト" come un token diverso dalla parola "テストメール. Per altre informazioni sul motore di ricerca SQL Server Full-Text, visitare i seguenti siti Web Microsoft: