Standard Analyzer (Standard Analyzer)
standard analyzer는 Milvus의 기본 analyzer예요. analyzer를 지정하지 않으면 텍스트 필드에 자동으로 적용돼요. standard 토크나이저와 lowercase 필터를 결합한 구성이에요.
standard analyzer는 단어 경계가 구분자(공백, 구두점 등)에 의존하는 언어에 적합해요. 하지만 중국어, 아랍어, 태국어, 일본어, 한국어 같은 언어는 언어별 토큰화나 정규화가 필요해요. 이런 경우 chinese, arabic, thai 같은 언어별 analyzer나 lindera, icu 같은 특수 토크나이저를 쓰는 사용자 지정 analyzer를 사용하세요.
출처: Milvus 문서
본문
정의 (Definition)
standard analyzer는 다음으로 구성돼요:
-
Tokenizer:
standard토크나이저를 사용해 연속된 유니코드 문자와 숫자를 토큰으로 유지하고 나머지 문자에서 분리해요. 정확한 문자 규칙은 Standard Tokenizer를 참고하세요. -
Filter:
lowercase필터를 사용해 모든 토큰을 소문자로 변환해서 대소문자 구분 없는 검색을 가능하게 해요. 자세한 내용은 Lowercase를 참고하세요.
standard analyzer의 기능은 다음 사용자 지정 analyzer 구성과 동일해요:
Python
analyzer_params = {
"tokenizer": "standard",
"filter": ["lowercase"]
}
Java
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("tokenizer", "standard");
analyzerParams.put("filter", Collections.singletonList("lowercase"));
NodeJS
const analyzer_params = {
"tokenizer": "standard",
"filter": ["lowercase"]
};
Go
analyzerParams := map[string]any{"tokenizer": "standard", "filter": []any{"lowercase"}}
cURL
# restful
analyzerParams='{
"tokenizer": "standard",
"filter": [
"lowercase"
]
}'
구성 (Configuration)
필드에 standard analyzer를 적용하려면 analyzer_params의 type을 standard로 설정하고 필요에 따라 선택 파라미터를 포함하면 돼요.
Python
analyzer_params = {
"type": "standard", # Specifies the standard analyzer type
}
Java
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("type", "standard");
NodeJS
const analyzer_params = {
"type": "standard", // Specifies the standard analyzer type
}
Go
analyzerParams = map[string]any{"type": "standard"}
cURL
# restful
analyzerParams='{
"type": "standard"
}'
standard analyzer가 받는 선택 파라미터는 다음과 같아요:
| 파라미터 | 설명 |
|---|---|
stop_words |
토큰화에서 제거할 불용어(stop words) 목록을 담은 배열이에요. 기본값은 _english_로, 흔한 영어 불용어의 내장 집합이에요. |
사용자 지정 불용어 구성 예시:
Python
analyzer_params = {
"type": "standard", # Specifies the standard analyzer type
"stop_words": ["of"] # Optional: List of words to exclude from tokenization
}
Java
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("type", "standard");
analyzerParams.put("stop_words", Collections.singletonList("of"));
NodeJS
analyzer_params = {
"type": "standard", // Specifies the standard analyzer type
"stop_words": ["of"] // Optional: List of words to exclude from tokenization
}
Go
analyzerParams = map[string]any{"type": "standard", "stop_words": []string{"of"}}
cURL
# restful
analyzer_params를 정의한 뒤에는 컬렉션 스키마를 정의할 때 VARCHAR 필드에 적용할 수 있어요. 그러면 Milvus가 해당 필드의 텍스트를 지정한 analyzer로 처리해 효율적인 토큰화와 필터링을 수행해요. 자세한 내용은 Example use를 참고하세요.
예시 (Examples)
analyzer 구성을 컬렉션 스키마에 적용하기 전에 run_analyzer 메서드로 동작을 먼저 확인해 보세요.
Analyzer 구성
Python
analyzer_params = {
"type": "standard", # Standard analyzer configuration
"stop_words": ["for"] # Optional: Custom stop words parameter
}
Java
Map<String, Object> analyzerParams = new HashMap<>();
analyzerParams.put("type", "standard");
analyzerParams.put("stop_words", Collections.singletonList("for"));
NodeJS
// javascript
Go
analyzerParams = map[string]any{"type": "standard", "stop_words": []string{"for"}}
cURL
# restful
analyzerParams='{
"type": "standard",
"stop_words": [
"of"
]
}'
run_analyzer로 검증하기
Python
from pymilvus import (
MilvusClient,
)
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"
# Run the standard analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Standard analyzer output:", result)
Java
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.RunAnalyzerReq;
import io.milvus.v2.service.vector.response.RunAnalyzerResp;
ConnectConfig config = ConnectConfig.builder()
.uri("http://localhost:19530")
.token("root:Milvus")
.build();
MilvusClientV2 client = new MilvusClientV2(config);
List<String> texts = new ArrayList<>();
texts.add("The Milvus vector database is built for scale!");
RunAnalyzerResp resp = client.runAnalyzer(RunAnalyzerReq.builder()
.texts(texts)
.analyzerParams(analyzerParams)
.build());
List<RunAnalyzerResp.AnalyzerResult> results = resp.getResults();
NodeJS
// javascript
Go
import (
"context"
"encoding/json"
"fmt"
"github.com/milvus-io/milvus/client/v2/milvusclient"
)
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "localhost:19530",
APIKey: "root:Milvus",
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
bs, _ := json.Marshal(analyzerParams)
texts := []string{"The Milvus vector database is built for scale!"}
option := milvusclient.NewRunAnalyzerOption(texts).
WithAnalyzerParams(string(bs))
result, err := client.RunAnalyzer(ctx, option)
if err != nil {
fmt.Println(err.Error())
// handle error
}
cURL
# restful
예상 출력
Standard analyzer output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']
더 알아보기 (Learn more)
- Standard Tokenizer — 토큰화 규칙 상세
- Lowercase — lowercase 필터 동작
- Analyzer 개요 — 내장·사용자 지정 analyzer 전반