다음을 통해 공유


일본어에 SQL Server 전체 텍스트 검색 엔진을 사용하는 경우 고려 사항

이 문서에서는 일본어에 SQL Server 전체 텍스트 검색 엔진을 사용할 때 적용되는 고려 사항에 대해 설명합니다.

적용 대상: SQL Server
원래 KB 번호: 2252955

소개

일본어에서는 해당 단어 사이에 공백이 없는 두 개 이상의 단어로 구성됩니다. Microsoft SQL Server에서 SQL Server 전체 텍스트 검색 엔진을 사용하여 일본어 구에 대한 접두사 검색을 수행하는 경우 전체 텍스트 검색 엔진은 이 구를 접두사 용어로 간주하지 않습니다. 대신 전체 텍스트 검색 엔진은 구를 단어 용어로 간주합니다. 단어는 공백이나 문장 부호가 없는 문자 문자열로 정의되어 있기 때문입니다. 또한 검색 엔진은 접두사 일치 모드에서만 작동합니다. 검색 엔진이 접미사 일치 모드에서 작동하지 않습니다.

자세한 정보

예를 들어 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

그런 다음, 다음 세 개의 쿼리를 실행합니다.

  • 쿼리 1

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

    쿼리 1의 결과는 다음과 같습니다.

    c1c2

    2Fw: テスト
    3KK 정보:テスト
    6テスト

  • 쿼리 2

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

    쿼리 2의 결과는 다음과 같습니다.

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

  • 쿼리 3

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

    쿼리 3의 결과는 다음과 같습니다.

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

    쿼리 결과에서 전체 텍스트 쿼리가 접미사 일치 모드에서 작동하지 않으므로 쿼리 2의 결과가 쿼리 3의 결과와 동일하다는 것을 알 수 있습니다. テスト 또한 일치 항목과 다르 ポリシーテスト 거나 テスト 일치하는 토큰입니다.

    구를 토큰화하려면 언어 패밀리에 대한 단어 분리기를 사용해야 합니다. 작업 차단기는 공백 및 기타 기호를 사용하여 구를 인식합니다. 따라서 일부 구는 단어 분리기에서 인식할 수 없으며 일본어로 전체 텍스트 엔진을 사용하여 검색할 수 없습니다. 단어 분리기에 대한 자세한 내용은 참조 섹션의 단어 분리기 및 형태소 분석기 항목을 참조 하세요.

    일본어로 전체 텍스트 검색 엔진을 사용하는 가장 좋은 방법은 구를 테스트하여 구가 제한 사항의 영향을 받는지 여부를 확인하는 것입니다. 구가 공백이 없는 단어로 구성된 경우 전체 텍스트 기능을 사용하여 구를 검색할 수 없습니다. 대신 LIKE 키워드를 와일드카드 문자와 함께 사용할 수 있습니다. 그러나 작업의 성능 like 은 전체 텍스트 검색의 성능보다 낮습니다. 애플리케이션의 성능 효과를 고려해야 합니다.

    다음은 구를 검색하는 키워드의 like 몇 가지 샘플 쿼리입니다.

  • 쿼리 4

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

    결과는 다음과 같습니다.

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

  • 쿼리 5

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

    결과는 다음과 같습니다.

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

참고 항목

SQL Server에서 전체 텍스트 검색 엔진을 사용하는 경우 다음 쿼리를 사용하여 전체 텍스트 인덱스의 콘텐츠에 대한 자세한 정보를 찾을 수 있습니다.

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

결과는 다음과 같습니다.

키워드 display_term column_id document_count
0x00660077 fw 2 1
0x0069006E0066006F0072006D006100740069006F006E 정보 2 2
0x006B006B kk 2
0x006C00690073007430C630B930C8 listポスト 2 1
0x00770068006900740065 흰색 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 끝 파일 2 12
(영향을 받는 행 14개)

샘플 결과에서 세 개의 행에만 "라는 단어가 テスト포함됩니다. 전체 텍스트 검색 엔진은 ""라는 단어를 "テスト와 다른 토큰テストメール으로 처리합니다. SQL Server 전체 텍스트 검색 엔진에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 방문하세요.