사용 사례에 적합한 분석기 선택하기

이 가이드는 분석기 선택에 대한 실질적인 의사 결정에 중점을 둡니다. 분석기 구성 요소와 분석기 매개변수를 추가하는 방법에 대한 기술적 세부 사항은 분석기 개요를 참조하세요.

2분 안에 분석기 이해하기

Milvus에서 분석기는 이 필드에 저장된 텍스트를 처리하여 전체 텍스트 검색 (BM25), 구문 검색 또는 텍스트 일치와 같은 기능으로 검색할 수 있도록 합니다. 원시 콘텐츠를 검색 가능한 토큰으로 변환하는 텍스트 프로세서라고 생각하면 됩니다.

분석기는 간단한 2단계 파이프라인으로 작동합니다:

Analyzer Workflow 분석기 워크플로

  1. 토큰화(필수): 이 초기 단계에서는 토큰화기를 적용하여 연속적인 텍스트 문자열을 토큰이라는 의미 있는 개별 단위로 분리합니다. 토큰화 방법은 언어와 콘텐츠 유형에 따라 크게 달라질 수 있습니다.

  2. 토큰 필터링(선택 사항): 토큰화 후에는 필터를 적용하여 토큰을 수정, 제거 또는 세분화합니다. 이러한 작업에는 모든 토큰을 소문자로 변환하거나, 의미가 없는 일반적인 단어(예: 중지어)를 제거하거나, 단어를 어근 형태(어간)로 줄이는 작업이 포함될 수 있습니다.

예시:

Input: "Hello World!" 
       1. Tokenization → ["Hello", "World", "!"]
       2. Lowercase & Punctuation Filtering → ["hello", "world"]

분석기 선택이 중요한 이유

잘못된 분석기를 선택하면 관련 문서를 검색할 수 없거나 관련 없는 결과가 반환될 수 있습니다.

다음 표에는 부적절한 분석기 선택으로 인해 발생하는 일반적인 문제가 요약되어 있으며, 검색 문제를 진단하기 위한 실행 가능한 솔루션이 나와 있습니다.

문제

증상

예(입력 및 출력)

원인(잘못된 분석기)

해결 방법(좋은 분석기)

토큰화 초과

기술 용어, 식별자 또는 URL에 대한 텍스트 쿼리가 관련 문서를 찾지 못합니다.

  • "user_id"['user', 'id']

  • "C++"['c']

standard 분석기

사용 whitespace 토큰화기, 또는 alphanumonly 필터와 결합합니다.

토큰화 미달

여러 단어로 이루어진 구문의 구성 요소를 검색해도 전체 구문이 포함된 문서를 반환하지 못합니다.

"state-of-the-art"['state-of-the-art']

분석기에 whitespace 토큰화

구두점과 공백을 분할하려면 standard 토큰화기를 사용하여 구두점과 공백을 분할하고 사용자 정의 정규식 필터를 사용하세요.

언어 불일치

특정 언어에 대한 검색 결과가 무의미하거나 존재하지 않는 경우.

중국어 텍스트: "机器学习"['机器学习'] (토큰 1개)

english 분석기

다음과 같은 언어별 분석기를 사용하세요. chinese.

첫 번째 질문입니다: 분석기를 선택해야 하나요?

많은 사용 사례의 경우 특별한 작업을 수행할 필요가 없습니다. 여러분이 그러한 사용 사례에 해당하는지 확인해 보겠습니다.

기본 동작: standard 분석기

전체 텍스트 검색과 같은 텍스트 검색 기능을 사용할 때 분석기를 지정하지 않으면 Milvus에서 자동으로 standard 분석기를 사용합니다.

standard 분석기:

  • 공백과 구두점으로 텍스트 분할

  • 모든 토큰을 소문자로 변환합니다.

  • 내장된 일반적인 영어 마침표와 대부분의 구두점 세트를 제거합니다.

변환 예시:

Input:  "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']

결정 기준 빠른 확인

이 표를 사용하여 기본 standard 분석기가 사용자의 요구 사항을 충족하는지 빠르게 확인할 수 있습니다. 그렇지 않은 경우 다른 경로를 선택해야 합니다.

콘텐츠

표준 분석기 괜찮나요?

필요한 사항

영어 블로그 게시물

✅ 예

기본 동작으로 충분합니다.

기본값을 사용합니다(구성할 필요 없음).

중국어 문서

❌ 아니요

중국어 단어에는 공백이 없으며 하나의 토큰으로 처리됩니다.

기본 제공 chinese 분석기를 사용합니다.

기술 문서

❌ 아니요

C++ 와 같은 용어에서 구두점이 제거됩니다.

사용자 정의 분석기를 만들려면 whitespace 토큰화 도구와 alphanumonly 필터를 사용하여 사용자 정의 분석기를 만듭니다.

프랑스어/스페인어 텍스트와 같이 공백으로 구분된 언어

⚠️ 아마도

악센트 문자(cafécafe)가 일치하지 않을 수 있습니다.

더 나은 결과를 얻으려면 asciifolding 가 포함된 사용자 지정 분석기를 사용하면 더 나은 결과를 얻을 수 있습니다.

다국어 또는 알 수 없는 언어

❌ 아니요

standard 분석기에는 다양한 문자 집합 및 토큰화 규칙을 처리하는 데 필요한 언어별 로직이 없습니다.

사용자 정의 분석기를 사용하여 icu 토큰화 도구와 함께 사용자 정의 분석기를 사용하세요.

또는 다국어 콘텐츠를 보다 정확하게 처리하기 위해 다국어 분석기 또는 언어 식별자를 구성하는 것도 고려해 보세요.

기본 standard 분석기가 요구 사항을 충족할 수 없는 경우 다른 분석기를 구현해야 합니다. 두 가지 경로가 있습니다:

경로 A: 기본 제공 분석기 사용

기본 제공 분석기는 일반적인 언어에 대해 미리 구성된 솔루션입니다. 기본 표준 분석기가 적합하지 않을 때 가장 쉽게 시작할 수 있는 방법입니다.

사용 가능한 기본 제공 분석기

분석기

언어 지원

구성 요소

참고

standard

대부분의 공백으로 구분된 언어(영어, 프랑스어, 독일어, 스페인어 등)

  • 토큰화 도구: standard

  • 필터: lowercase

초기 텍스트 처리를 위한 범용 분석기. 단일 언어 시나리오의 경우, 언어별 분석기(예: english)가 더 나은 성능을 제공합니다.

english

영어 전용으로, 더 나은 영어 의미 매칭을 위해 어간 및 중지 단어 제거를 적용합니다.

  • 토큰화: standard

  • 필터 lowercase, stemmer, stop

standard 이상의 영어 전용 콘텐츠에 권장됩니다.

chinese

중국어

  • 토큰화 도구: jieba

  • 필터: cnalphanumonly

현재 기본적으로 중국어 간체 사전을 사용합니다.

구현 예

기본 제공 분석기를 사용하려면 필드 스키마를 정의할 때 analyzer_params 에서 해당 유형을 지정하기만 하면 됩니다.

# Using built-in English analyzer
analyzer_params = {
    "type": "english"
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

자세한 사용법은 전체 텍스트 검색, 텍스트 일치 또는 구문 일치를 참조하세요.

경로 B: 사용자 지정 분석기 만들기

기본 제공 옵션이 사용자의 요구를 충족시키지 못하는 경우 토큰화 도구와 필터 세트를 결합하여 사용자 정의 분석기를 만들 수 있습니다. 이렇게 하면 텍스트 처리 파이프라인을 완전히 제어할 수 있습니다.

1단계: 언어에 따라 토큰화 도구 선택하기

콘텐츠의 기본 언어를 기준으로 토큰화 도구를 선택하세요:

서양 언어

공백으로 구분된 언어의 경우 다음 옵션이 있습니다:

토큰화 도구

작동 방식

최적 대상

예시

standard

공백과 구두점을 기준으로 텍스트 분할

일반 텍스트, 혼합 구두점

  • 입력: "Hello, world! Visit example.com"

  • 출력: ['Hello', 'world', 'Visit', 'example', 'com']

whitespace

공백 문자만 분할

사전 처리된 콘텐츠, 사용자 서식 지정 텍스트

  • 입력 "user_id = get_user_data()"

  • 출력 ['user_id', '=', 'get_user_data()']

동아시아 언어

사전 기반 언어는 적절한 단어 분할을 위해 특수 토큰화기가 필요합니다:

중국어

토큰화기

작동 방식

최적 대상

예시

jieba

지능형 알고리즘을 사용한 중국어 사전 기반 세분화

중국어콘텐츠에 권장 - 중국어를 위해 특별히 설계된 사전과 지능형 알고리즘을 결합합니다.

  • 입력: "机器学习是人工智能的一个分支"

  • 출력: ['机器', '学习', '是', '人工', '智能', '人工智能', '的', '一个', '分支']

lindera

중국어 사전을 사용한 순수 사전 기반 형태소 분석(cc-cedict)

jieba 와 비교하여 중국어 텍스트를 보다 일반적인 방식으로 처리합니다.

  • 입력: "机器学习算法"

  • 출력 ["机器", "学习", "算法"]

일본어와 한국어

언어

토큰화기

사전 옵션

최적 대상

예제

일본어

lindera

ipadic (범용), ipadic-neologd (현대 용어), unidic (학술 용어)

고유 명사 처리를 통한 형태소 분석

  • 입력: "東京都渋谷区"

  • 출력 ["東京", "都", "渋谷", "区"]

한국어

lindera

ko-dic

한국어 형태소 분석

  • 입력: "안녕하세요"

  • 출력 ["안녕", "하", "세요"]

다국어 또는 알 수 없는 언어

문서 내에서 언어가 예측할 수 없거나 혼합된 콘텐츠에 적합합니다:

토큰화

작동 방식

최상의 용도

예시

icu

유니코드 인식 토큰화(유니코드를 위한 국제 컴포넌트)

혼합 스크립트, 알 수 없는 언어 또는 간단한 토큰화로 충분한 경우

  • 입력: "Hello 世界 مرحبا"

  • 출력 ['Hello', ' ', '世界', ' ', 'مرحبا']

ICU를 사용해야 하는 경우:

  • 언어 식별이 비현실적인 혼합 언어.

  • 다국어 분석기나 언어 식별자의 오버헤드를 원하지 않는 경우.

  • 콘텐츠에 기본 언어가 있고 전체 의미에 거의 기여하지 않는 외국어가 간혹 포함된 경우(예: 브랜드 이름이 산발적으로 포함된 영어 텍스트 또는 일본어 또는 프랑스어로 된 기술 용어).

다른 접근 방식: 다국어 콘텐츠를 보다 정확하게 처리하려면 다국어 분석기 또는 언어 식별자를 사용하는 것이 좋습니다. 자세한 내용은 다국어 분석기 또는 언어 식별자를 참조하세요.

2단계: 정밀도를 위해 필터 추가하기

토큰화기를 선택한 후 특정 검색 요구 사항 및 콘텐츠 특성에 따라 필터를 적용합니다.

일반적으로 사용되는 필터

이러한 필터는 대부분의 공백으로 구분된 언어 구성(영어, 프랑스어, 독일어, 스페인어 등)에 필수적이며 검색 품질을 크게 향상시킵니다:

필터

작동 방식

사용 시기

예시

lowercase

모든 토큰을 소문자로 변환

범용 - 대소문자 구분이 있는 모든 언어에 적용됩니다.

  • 입력: ["Apple", "iPhone"]

  • 출력: [['apple'], ['iphone']]

stemmer

단어를 어근 형태로 축소

단어 굴절이 있는 언어(영어, 프랑스어, 독일어 등)

영어의 경우:

  • 입력: ["running", "runs", "ran"]

  • 출력: [['run'], ['run'], ['ran']]

stop

일반적인 의미 없는 단어 제거

대부분의 언어 - 특히 공백으로 구분된 언어에 효과적임

  • 입력: ["the", "quick", "brown", "fox"]

  • 출력: [[], ['quick'], ['brown'], ['fox']]

동아시아 언어(중국어, 일본어, 한국어 등)의 경우, 언어별 필터에 집중하세요. 이러한 언어는 일반적으로 텍스트 처리에 다른 접근 방식을 사용하므로 형태소 분석의 이점이 크지 않을 수 있습니다.

텍스트 정규화 필터

이 필터는 텍스트 변형을 표준화하여 일치 일치도를 향상시킵니다:

필터

작동 방식

사용 시기

예제

asciifolding

악센트가 있는 문자를 ASCII 등가 문자로 변환하기

해외 콘텐츠, 사용자 생성 콘텐츠

  • 입력: ["café", "naïve", "résumé"]

  • 출력 [['cafe'], ['naive'], ['resume']]

토큰 필터링

문자 내용 또는 길이에 따라 보존할 토큰을 제어합니다:

필터

작동 방식

사용 시기

예제

removepunct

독립형 구두점 토큰 제거하기

jieba, lindera, icu 토큰화기에서 출력을 정리하여 구두점을 단일 토큰으로 반환합니다.

  • 입력: ["Hello", "!", "world"]

  • 출력: [['Hello'], ['world']]

alphanumonly

문자와 숫자만 유지

기술 콘텐츠, 깨끗한 텍스트 처리

  • 입력: ["user123", "test@email.com"]

  • 출력: [['user123'], ['test', 'email', 'com']]

length

지정된 길이 범위를 벗어난 토큰 제거

노이즈 필터링(지나치게 긴 토큰)

  • 입력 ["a", "very", "extraordinarily"]

  • 출력: [['a'], ['very'], []] ( 최대=10인 경우)

regex

사용자 지정 패턴 기반 필터링

도메인별 토큰 요구 사항

  • 입력: ["test123", "prod456"]

  • 출력 [[], ['prod456']] (만약 expr="^prod")

언어별 필터

이 필터는 특정 언어 특성을 처리합니다:

필터

언어

작동 방식

예제

decompounder

독일어

복합어를 검색 가능한 구성 요소로 분할

  • 입력: ["dampfschifffahrt"]

  • 출력 [['dampf', 'schiff', 'fahrt']]

cnalphanumonly

중국어

한자 + 영숫자만 유지합니다.

  • 입력: ["Hello", "世界", "123", "!@#"]

  • 출력: [['Hello'], ['世界'], ['123'], []]

cncharonly

중국어

한자만 유지

  • 입력: ["Hello", "世界", "123"]

  • 출력: [[], ['世界'], []]

3단계: 결합 및 구현

사용자 정의 분석기를 만들려면 analyzer_params 사전에서 토큰화 도구와 필터 목록을 정의합니다. 필터는 나열된 순서대로 적용됩니다.

# Example: A custom analyzer for technical content
analyzer_params = {
    "tokenizer": "whitespace",
    "filter": ["lowercase", "alphanumonly"]
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

최종: 테스트하기 run_analyzer

컬렉션에 적용하기 전에 항상 구성을 검증하세요:

# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"

# Run analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

확인해야 할 일반적인 문제

  • 토큰화 초과: 기술 용어가 잘못 분할됨

  • 토큰화 미달: 구문이 제대로 분리되지 않음

  • 누락된 토큰: 중요한 용어가 필터링되지 않음

자세한 사용법은 run_analyzer를 참조하세요.

이 섹션에서는 Milvus에서 분석기로 작업할 때 일반적인 사용 사례에 대한 권장 토큰화 및 필터 구성을 제공합니다. 콘텐츠 유형 및 검색 요구 사항에 가장 적합한 조합을 선택하세요.

수집에 분석기를 적용하기 전에 다음을 사용하는 것이 좋습니다. run_analyzer 를 사용하여 텍스트 분석 성능을 테스트하고 검증하세요.

악센트 마크가 있는 언어(프랑스어, 스페인어, 독일어 등)

소문자 변환, 언어별 어간 및 중단어 제거 기능을 갖춘 standard 토큰화기를 사용하세요. 이 구성은 languagestop_words 매개변수를 수정하여 다른 유럽 언어에도 사용할 수 있습니다.

# French example
analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase", 
        "asciifolding",  # Handle accent marks
        {
            "type": "stemmer",
            "language": "french"
        },
        {
            "type": "stop",
            "stop_words": ["_french_"]
        }
    ]
}

# For other languages, modify the language parameter:
# "language": "spanish" for Spanish
# "language": "german" for German
# "stop_words": ["_spanish_"] or ["_german_"] accordingly

영어 콘텐츠

포괄적인 필터링 기능을 갖춘 영어 텍스트 처리용. 내장된 english 분석기를 사용할 수도 있습니다:

analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase",
        {
            "type": "stemmer",
            "language": "english"
        },
        {
            "type": "stop",
            "stop_words": ["_english_"]
        }
    ]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "english"
}

중국어 콘텐츠

jieba 토큰화기를 사용하고 문자 필터를 적용하여 한자, 라틴 문자 및 숫자만 유지합니다.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": ["cnalphanumonly"]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "chinese"
}

중국어 간체( cnalphanumonly )의 경우 중국어 문자, 영숫자 텍스트 및 숫자를 제외한 모든 토큰을 제거합니다. 이렇게 하면 구두점이 검색 품질에 영향을 미치는 것을 방지할 수 있습니다.

일본어 콘텐츠

일본어 사전 및 필터와 함께 lindera 토큰화기를 사용하여 구두점을 정리하고 토큰 길이를 조절하세요:

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ipadic"  # Options: ipadic, ipadic-neologd, unidic
    },
    "filter": [
        "removepunct",  # Remove standalone punctuation
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

한국어 콘텐츠

일본어와 마찬가지로 한국어 사전과 함께 lindera 토큰화 도구를 사용합니다:

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ko-dic"
    },
    "filter": [
        "removepunct",
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

혼합 또는 다국어 콘텐츠

여러 언어에 걸쳐 있거나 예측할 수 없는 스크립트를 사용하는 콘텐츠로 작업할 때는 icu 분석기로 시작하세요. 이 유니코드 인식 분석기는 혼합 스크립트와 기호를 효과적으로 처리합니다.

기본 다국어 구성(스템밍 없음):

analyzer_params = {
    "tokenizer": "icu",
    "filter": ["lowercase", "asciifolding"]
}

고급 다국어 처리:

여러 언어에서 토큰 동작을 더 잘 제어할 수 있습니다:

  • 다국어 분석기 구성을 사용합니다. 자세한 내용은 다국어 분석기를 참조하세요.

  • 콘텐츠에 언어 식별자를 구현합니다. 자세한 내용은 언어 식별자를 참조하세요.

텍스트 검색 기능과 통합하기

분석기를 선택한 후 Milvus에서 제공하는 텍스트 검색 기능과 통합할 수 있습니다.

  • 전체 텍스트 검색

    분석기는 스파스 벡터 생성을 통해 BM25 기반 전체 텍스트 검색에 직접적인 영향을 미칩니다. 인덱싱과 쿼리 모두에 동일한 분석기를 사용하여 일관된 토큰화를 보장하세요. 언어별 분석기는 일반적으로 일반 분석기보다 더 나은 BM25 점수를 제공합니다. 구현에 대한 자세한 내용은 전체 텍스트 검색을 참조하세요.

  • 텍스트 일치

    텍스트 일치 작업은 분석기 출력에 따라 쿼리와 색인된 콘텐츠 간에 정확한 토큰 일치를 수행합니다. 구현에 대한 자세한 내용은 텍스트 일치를 참조하세요.

  • 구문 일치

    구문 검색은 구문 경계와 의미를 유지하기 위해 여러 단어 표현에 걸쳐 일관된 토큰화가 필요합니다. 구현에 대한 자세한 내용은 구문 일치를 참조하세요.