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

-
トークナイズ (必須): まずこのステージでトークナイザーを適用し、連続したテキスト文字列をトークンと呼ばれる離散的で意味のある単位に分解します。トークナイズ方法は言語やコンテンツの種類によって大きく異なります。
-
トークンフィルタリング (オプション): トークナイズの後、フィルターが適用されてトークンを変更、削除、または洗練します。これらの操作には、すべてのトークンを小文字に変換、一般的で意味のない単語(ストップワードなど)を削除、または単語を原型に縮小(ステミング)することが含まれます。
例:
入力: "Hello World!"
1. トークナイズ → ["Hello", "World", "!"]
2. 小文字化および句読点フィルタリング → ["hello", "world"]
アナライザー選択が重要な理由
選択したアナライザーは、検索の品質と関連性に直接影響します。
不適切なアナライザーは、過剰または不十分なトークナイズ、用語の欠落、または無関係な結果を引き起こす可能性があります。
問題 | 症状 | 例 (入力 & 出力) | 原因 (悪いアナライザー) | 解決策 (良いアナライザー) |
|---|---|---|---|---|
過剰なトークナイズ | 技術用語、識別子、またはURLの誤分割 |
|
|
|
不十分なトークナイズ | 複数語のフレーズが1つのトークンとして扱われる |
|
| |
言語の不一致 | 外国語の結果が意味をなさない | 中国語テキスト: |
|
|
ステップ1: アナライザーを選択する必要がありますか?
テキスト検索機能(例:全文検索、フレーズマッチ、またはテキストマッチ)を使用しているが明示的にアナライザーを指定しない場合、
Zilliz Cloudは自動的にstandard analyzerを適用します。
Standard analyzerの動作:
-
スペースと句読点でテキストを分割
-
すべてのトークンを小文字に変換
変換例:
入力: "The Milvus vector database is built for scale!"
出力: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'for', 'scale']
ステップ2: standard analyzerがニーズに合っているか確認
この表を使用して、デフォルトのstandard analyzerがニーズに合っているか迅速に判断してください。合っていなければ、異なるパスを選択する必要があります。
コンテンツ | Standard AnalyzerでOK? | 理由 | 必要事項 |
|---|---|---|---|
英語のブログ記事 | ✅ はい | デフォルト動作で十分。 | デフォルトを使用(構成不要)。 |
中国語ドキュメント | ❌ いいえ | 中国語の単語にはスペースがないため1つのトークンとして処理される。 | 組み込み |
技術文書 | ❌ いいえ |
|
|
フランス語/スペイン語などスペースで区切られた言語 | ⚠️ たぶん | アクセント付き文字 ( | より良い結果を得るために |
多言語または不明な言語 | ❌ いいえ |
| unicode対応のトークナイズのために |
ステップ3: 自分の道を選ぶ
デフォルトのstandard analyzerが不十分な場合、以下の2つの道から選択してください:
-
道A - 組み込みアナライザーを使用 (すぐに使用できる、言語固有)
-
道B - カスタムアナライザーを作成 (手動でトークナイザー + フィルターのセットを定義)
道A: 組み込みアナライザーを使用
組み込みアナライザーは、一般的な言語用に事前構成されたソリューションです。デフォルトのstandard analyzerが完璧に適合しない場合、最も簡単に開始する方法です。
使用可能な組み込みアナライザー
アナライザー | 言語サポート | 構成要素 | 注釈 |
|---|---|---|---|
多くのスペースで区切られた言語 (英語、フランス語、ドイツ語、スペイン語など) |
| 初期テキスト処理のための汎用アナライザー。単一言語シナリオでは、( | |
専用の英語、ステミングとストップワード削除を適用して英語のセマンティックマッチングを向上 |
| 英語のみのコンテンツには | |
中国語 |
| 現在、デフォルトで簡体字中国語辞書を使用。 |
実装例
組み込みアナライザーを使用するには、フィールドスキーマを定義する際に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対応のトークナイズ (International Components for 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": "arabig"
}
]
}
ベンガル語
{
"tokenizer": "icu",
"filter": ["lowercase", {
"type": "stop",
"stop_words": [<put stop words list here>]
}]
}
フランス語
{
"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": [<put stop words list here>]
}]
}
日本語
{
"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": [<put stop words list here>]
}]
}
トルコ語
{
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "turkish"
}
]
}
ウルドゥー語
{
"tokenizer": "icu",
"filter": ["lowercase", {
"type": "stop",
"stop_words": [<put stop words list here>]
}]
}
混合または多言語コンテンツ
複数の言語にまたがるコンテンツや、予測不可能に使用されるスクリプトを処理する場合は、icuアナライザーから始めます。このUnicode対応アナライザーは、混合スクリプトと記号を効果的に処理します。
基本的な多言語構成 (ステミングなし):
analyzer_params = {
"tokenizer": "icu",
"filter": ["lowercase", "asciifolding"]
}
高度な多言語処理:
異なる言語間でのトークン動作をよりよく制御するには:
Zilliz Cloudでアナライザーを構成およびプレビュー
Zilliz Cloudでは、コードを書かずにZilliz Cloudコンソールから直接テキストアナライザーを構成およびテストできます。