ケースに合った正しいアナライザーの選択
このガイドは、Zilliz Cloudでテキストコンテンツに最も適したアナライザーを選択して構成するのに役立ちます。
実践的な意思決定に焦点を当てています:どのアナライザーを使用するか、いつカスタマイズするか、構成をどのように検証するかです。アナライザーの構成要素とパラメータに関する背景情報については、アナライザー概要を参照してください。
クイック概念:アナライザーの動作方法
アナライザーは、全文検索(BM25ベース)、フレーズマッチ、またはテキストマッチのような機能で検索可能になるようにテキストデータを処理します。アナライザーは、生のテキストを離散的な検索可能なトークンに変換するために2段階のパイプラインを通します。

-
トークン化(必須): この初期段階では、トークナイザーを適用して、連続したテキスト文字列をトークンと呼ばれる離散的で意味のある単位に分解します。言語やコンテンツの種類によってトークン化方法は大きく異なります。
-
トークンフィルタリング(オプション): トークン化の後、フィルターが適用されてトークンを変更、削除、または洗練させます。これらの操作には、すべてのトークンを小文字に変換する、一般的で意味のない単語(ストップワード)を削除する、または語幹に還元する(語幹抽出)などが含まれます。
例:
入力: "Hello World!"
1. トークン化 → ["Hello", "World", "!"]
2. 小文字化および句読点フィルタリング → ["hello", "world"]
アナライザーの選択が重要な理由
選択するアナライザーは、検索品質と関連性に直接影響します。
不適切なアナライザーは、過剰または不足したトークン化、用語の抜け、または無関係な結果を引き起こす可能性があります。
問題 | 症状 | 例(入力と出力) | 原因(悪いアナライザー) | 解決策(良いアナライザー) |
|---|---|---|---|---|
過剰なトークン化 | 技術用語、識別子、またはURLが正しく分割されない |
|
|
|
不足したトークン化 | 複数単語のフレーズが1つのトークンとして扱われる |
|
| |
言語の不一致 | 外国語の結果が意味がない | 中国語テキスト: |
|
|
ステップ1: アナライザーを選択する必要がありますか?
テキスト検索機能(例:全文検索、フレーズマッチ、またはテキストマッチ)を使用しているが、明示的にアナライザーを指定しない場合、
Zilliz Cloudは自動的にstandardアナライザーを適用します。
Standardアナライザーの動作:
-
スペースと句読点でテキストを分割
-
すべてのトークンを小文字に変換
変換例:
入力: "The Milvus vector database is built for scale!"
出力: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'for', 'scale']
ステップ2: standardアナライザーが要件を満たしているか確認
この表を使用して、デフォルトのstandardアナライザーが要件を満たしているかを迅速に判断してください。満たしていない場合は、別のパスを選択します。
あなたのコンテンツ | StandardアナライザーでOKですか? | 理由 | 必要なもの |
|---|---|---|---|
英語のブログ投稿 | ✅ はい | デフォルトの動作で十分です。 | デフォルトを使用(構成の必要なし)。 |
中国語ドキュメント | ❌ いいえ | 中国語の単語にはスペースがなく、1つのトークンとして扱われます。 | 組み込みの |
技術文書 | ❌ いいえ |
|
|
フランス語/スペイン語などのスペース区切り言語 | ⚠️ おそらく | アクセント付き文字( | より良い結果を得るために |
多言語または不明な言語 | ❌ いいえ |
| Unicode対応のトークン化のために |
ステップ3: パスを選択
デフォルトのstandardアナライザーが不十分な場合は、2つのパスのいずれかを選択します:
-
パスA – 組み込みアナライザーを使用する(即利用可能、言語固有)
-
パスB – カスタムアナライザーを作成する(トークナイザー+フィルターのセットを手動定義)
パスA: 組み込みアナライザーを使用
組み込みアナライザーは、一般的な言語用に事前構成されたソリューションです。standardアナライザーが完璧に適合しない場合に開始する最も簡単な方法です。
利用可能な組み込みアナライザー
アナライザー | 言語サポート | 構成要素 | 備考 |
|---|---|---|---|
ほとんどのスペース区切り言語(英語、フランス語、ドイツ語、スペイン語など) |
| 初期テキスト処理のための汎用アナライザーです。単一言語のシナリオでは、言語固有のアナライザー( | |
英語専用で、語幹抽出とストップワード削除を適用して英語の意味的マッチングを改善 |
|
| |
中国語 |
| 現在は簡体字中国語辞書をデフォルトで使用しています。 |
実装例
組み込みアナライザーを使用するには、フィールドスキーマを定義するときにanalyzer_paramsでそのタイプを指定するだけです。
# 組み込み英語アナライザーを使用
analyzer_params = {
"type": "english"
}
# コレクションスキーマ内のターゲットVARCHARフィールドにアナライザー構成を適用
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
)
パスB: カスタムアナライザーを作成
組み込みオプションが要件を満たさない場合は、トークナイザーと一連のフィルターを組み合わせてカスタムアナライザーを作成できます。これにより、テキスト処理パイプラインを完全に制御できます。
ステップ1: 言語に基づいてトークナイザーを選択
コンテンツの主言語に基づいてトークナイザーを選択してください:
西欧言語
スペース区切り言語の場合、以下のオプションがあります:
トークナイザー | 動作方法 | 最適な用途 | 例 |
|---|---|---|---|
スペースと句読点に基づいてテキストを分割 | 一般テキスト、混合句読点 |
| |
空白文字のみで分割 | 前処理されたコンテンツ、ユーザー形式のテキスト |
|
東アジア言語
辞書ベースの言語は、適切な単語分割のために専門のトークナイザーが必要です:
中国語
トークナイザー | 動作方法 | 最適な用途 | 例 |
|---|---|---|---|
中国語辞書ベースのセグメンテーションと知能アルゴリズム | 中国語コンテンツに推奨 - 辞書と知能アルゴリズムを組み合わせ、中国語に特化して設計 |
| |
純粋な辞書ベースの形態的分析と中国語辞書(cc-cedict) |
|
|
日本語と韓国語
言語 | トークナイザー | 辞書オプション | 最適な用途 | 例 |
|---|---|---|---|---|
日本語 | ipadic(汎用)、ipadic-neologd(現代用語)、unidic(学術用) | 形態的分析と固有名詞処理 |
| |
韓国語 | 韓国語形態的分析 |
|
多言語または未知の言語
ドキュメント内で言語が予測不可能または混合されているコンテンツの場合:
トークナイザー | 動作方法 | 最適な用途 | 例 |
|---|---|---|---|
Unicode対応のトークン化(国際コンポーネントのUnicode) | 混合スクリプト、未知の言語、または単純なトークン化で十分な場合 |
|
icuを使用する場合:
-
言語識別が実用的でない混合言語。
-
主要言語で、全体的な意味にあまり貢献しない偶発的な外来語が含まれているコンテンツ(例:日本語やフランス語のブランド名や技術用語が散在する英語テキスト)。
代替手段: 多言語コンテンツをより正確に処理するには、多言語アナライザーまたは言語識別子の使用を検討してください。詳細については、多言語アナライザーまたは言語識別子を参照してください。
ステップ2: 精度のためにフィルターを追加
トークナイザーを選択した後、特定の検索要件とコンテンツ特性に応じてフィルターを適用します。
一般的に使用されるフィルター
これらのフィルターは、ほとんどのスペース区切り言語構成(英語、フランス語、ドイツ語、スペイン語など)に不可欠であり、検索品質を大幅に向上させます:
フィルター | 動作方法 | 使用する場合 | 例 |
|---|---|---|---|
すべてのトークンを小文字に変換 | 普遍的 - 大文字小文字の区別があるすべての言語に適用 |
| |
語句を基本形に還元 | 語形変化のある言語(英語、フランス語、ドイツ語など) | 英語の場合:
| |
一般的で意味のない単語を削除 | ほとんどの言語 - 特にスペース区切り言語に効果的 |
|
東アジア言語(中国語、日本語、韓国語など)の場合は、代わりに言語固有のフィルターに注目してください。これらの言語は通常、テキスト処理に異なるアプローチを用い、語幹抽出から大幅な恩恵を受けないことがあります。
テキスト正規化フィルター
これらのフィルターは、マッチングの一貫性を改善するためにテキストの変形を標準化します:
フィルター | 動作方法 | 使用する場合 | 例 |
|---|---|---|---|
アクセント付き文字をASCII相当に変換 | 国際的なコンテンツ、ユーザー生成コンテンツ |
|
トークンフィルタリング
文字コンテンツや長さに基づいて保存するトークンを制御:
フィルター | 動作方法 | 使用する場合 | 例 |
|---|---|---|---|
独立した句読点トークンを削除 |
|
| |
文字と数字のみを保持 | 技術コンテンツ、クリーンテキスト処理 |
| |
指定された長さ範囲外のトークンを削除 | ノイズのフィルタリング(過度に長いトークン) |
| |
カスタムパターンベースのフィルタリング | ドメイン固有のトークン要件 |
|
言語固有のフィルター
これらのフィルターは、特定の言語特性を処理します:
フィルター | 言語 | 動作方法 | 例 |
|---|---|---|---|
ドイツ語 | 合成語を検索可能な構成要素に分割 |
| |
中国語 | 中国語文字+英数字を保持 |
| |
中国語 | 中国語文字のみを保持 |
|
ステップ3: 組み合わせて実装
カスタムアナライザーを作成するには、analyzer_params辞書でトークナイザーとフィルターのリストを定義します。フィルターはリストされた順序で適用されます。
# 例: 技術コンテンツ用のカスタムアナライザー
analyzer_params = {
"tokenizer": "whitespace",
"filter": ["lowercase", "alphanumonly"]
}
# コレクションスキーマ内のターゲットVARCHARフィールドにアナライザー構成を適用
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
)
最後: run_analyzerでテスト
コレクションに適用する前に、常に構成を検証してください:
# 解析するサンプルテキスト
sample_text = "The Milvus vector database is built for scale!"
# 定義された構成でアナライザーを実行
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)
チェックする一般的な問題:
-
過剰なトークン化: 技術用語が誤って分割されている
-
不足したトークン化: フレーズが適切に分離されていない
-
トークンの欠落: 重要な用語がフィルターで除外されている
詳細な使用方法については、run_analyzerを参照してください。
ユースケース別クイックレシピ
このセクションでは、Zilliz Cloudでアナライザーを使用する際の一般的なユースケースに推奨されるトークナイザーとフィルター構成を提供します。コンテンツタイプと検索要件に最もよく合う組み合わせを選択してください。
アナライザーをコレクションに適用する前には、run_analyzerを使用してテキスト分析パフォーマンスをテストおよび検証することをお勧めします。
英語
analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "english"
},
{
"type": "stop",
"stop_words": [
"_english_"
]
}
]
}
中国語
{
"tokenizer": "jieba",
"filter": ["cnalphanumonly"]
}
アラビア語
{
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "arabic"
}
]
}
ベンガル語
{
"tokenizer": "icu",
"filter": ["lowercase", {
"type": "stop",
"stop_words": [<ストップワードリストをここに配置>]
}]
}
フランス語
{
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "french"
},
{
"type": "stop",
"stop_words": [
"_french_"
]
}
]
}
ドルマン語
{
"tokenizer": {
"type": "lindera",
"dict_kind": "ipadic"
},
"filter": [
"removepunct"
]
}
ヒンディー語
{
"tokenizer": "icu",
"filter": ["lowercase", {
"type": "stop",
"stop_words": [<ストップワードリストをここに配置>]
}]
}
ペャポニーズ
{
"tokenizer": {
"type": "lindera",
"dict_kind": "ipadic"
},
"filter": [
"removepunct"
]
}
ポルトガル語
{
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "portuguese"
},
{
"type": "stop",
"stop_words": [
"_portuguese_"
]
}
]
}
ロシアン語
{
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "russian"
},
{
"type": "stop",
"stop_words": [
"_russian_"
]
}
]
}
スペイン語
{
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "spanish"
},
{
"type": "stop",
"stop_words": [
"_spanish_"
]
}
]
}
スワヒリ語
{
"tokenizer": "standard",
"filter": ["lowercase", {
"type": "stop",
"stop_words": [<ストップワードリストをここに配置>]
}]
}
トルコ語
{
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "turkish"
}
]
}
ォルド語
{
"tokenizer": "icu",
"filter": ["lowercase", {
"type": "stop",
"stop_words": [<ストップワードリストをここに配置>]
}]
}
混合または多言語コンテンツ
複数の言語にまたがるコンテンツや、予測不可能にスクリプトを使用するコンテンツを扱う場合、icuアナライザーから始めてください。このUnicode対応アナライザーは、混合スクリプトと記号を効果的に処理します。
基本的な多言語構成(語幹抽出なし):
analyzer_params = {
"tokenizer": "icu",
"filter": ["lowercase", "asciifolding"]
}
高度な多言語処理:
異なる言語間でトークンの動作をより良く制御するには:
Zilliz Cloudでアナライザーを構成およびプレビュー
Zilliz Cloudでは、コードを書くことなくZilliz Cloud コンソールから直接テキストアナライザーを構成およびテストできます。