メインコンテンツまでスキップ
バージョン: User Guides (BYOC)

ケースに合った正しいアナライザーの選択

このガイドは、Zilliz Cloudでテキストコンテンツに最も適したアナライザーを選択して構成するのに役立ちます。

実践的な意思決定に焦点を当てています:どのアナライザーを使用するか、いつカスタマイズするか、構成をどのように検証するかです。アナライザーの構成要素とパラメータに関する背景情報については、アナライザー概要を参照してください。

クイック概念:アナライザーの動作方法

アナライザーは、全文検索(BM25ベース)、フレーズマッチ、またはテキストマッチのような機能で検索可能になるようにテキストデータを処理します。アナライザーは、生のテキストを離散的な検索可能なトークンに変換するために2段階のパイプラインを通します。

JwMZwIYUwhbSZ4bjhxcc1PfNnvx

  1. トークン化(必須): この初期段階では、トークナイザーを適用して、連続したテキスト文字列をトークンと呼ばれる離散的で意味のある単位に分解します。言語やコンテンツの種類によってトークン化方法は大きく異なります。

  2. トークンフィルタリング(オプション): トークン化の後、フィルターが適用されてトークンを変更、削除、または洗練させます。これらの操作には、すべてのトークンを小文字に変換する、一般的で意味のない単語(ストップワード)を削除する、または語幹に還元する(語幹抽出)などが含まれます。

例:

入力: "Hello World!"
1. トークン化 → ["Hello", "World", "!"]
2. 小文字化および句読点フィルタリング → ["hello", "world"]

アナライザーの選択が重要な理由

選択するアナライザーは、検索品質と関連性に直接影響します。

不適切なアナライザーは、過剰または不足したトークン化、用語の抜け、または無関係な結果を引き起こす可能性があります。

問題

症状

例(入力と出力)

原因(悪いアナライザー)

解決策(良いアナライザー)

過剰なトークン化

技術用語、識別子、またはURLが正しく分割されない

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

  • "C++"['c']

standardアナライザー

whitespaceトークナイザーを使用する。また、alphanumonlyフィルターを組み合わせます。

不足したトークン化

複数単語のフレーズが1つのトークンとして扱われる

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

whitespaceトークナイザーを使用するアナライザー

standardトークナイザーを使用して句読点とスペースで分割します。カスタムregexフィルターを使用します。

言語の不一致

外国語の結果が意味がない

中国語テキスト: "机器学习"['机器学习'](1つのトークン)

englishアナライザー

chineseのような言語固有のアナライザーを使用します。

ステップ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つのトークンとして扱われます。

組み込みのchineseアナライザーを使用します。

技術文書

❌ いいえ

C++のような用語から句読点が削除されます。

whitespaceトークナイザーとalphanumonlyフィルターを使用したカスタムアナライザーを作成します。

フランス語/スペイン語などのスペース区切り言語

⚠️ おそらく

アクセント付き文字(cafécafe)が一致しない場合があります。

より良い結果を得るためにasciifoldingを含むカスタムアナライザーを推奨します。

多言語または不明な言語

❌ いいえ

standardアナライザーは、異なる文字セットとトークン化ルールを処理するために必要な言語固有のロジックを持っていません。

Unicode対応のトークン化のためにicuトークナイザーを使用したカスタムアナライザーを使用します。

または、多言語コンテンツをより正確に処理するために多言語アナライザーまたは言語識別子の構成を検討してください。

ステップ3: パスを選択

デフォルトのstandardアナライザーが不十分な場合は、2つのパスのいずれかを選択します:

  • パスA – 組み込みアナライザーを使用する(即利用可能、言語固有)

  • パスB – カスタムアナライザーを作成する(トークナイザー+フィルターのセットを手動定義)

パスA: 組み込みアナライザーを使用

組み込みアナライザーは、一般的な言語用に事前構成されたソリューションです。standardアナライザーが完璧に適合しない場合に開始する最も簡単な方法です。

利用可能な組み込みアナライザー

アナライザー

言語サポート

構成要素

備考

standard

ほとんどのスペース区切り言語(英語、フランス語、ドイツ語、スペイン語など)

  • トークナイザー: standard

  • フィルター: lowercase

初期テキスト処理のための汎用アナライザーです。単一言語のシナリオでは、言語固有のアナライザー(englishなど)がより良いパフォーマンスを提供します。

english

英語専用で、語幹抽出とストップワード削除を適用して英語の意味的マッチングを改善

  • トークナイザー: standard

  • フィルター: lowercase, stemmer, stop

standardより優先して英語専用コンテンツに推奨。

chinese

中国語

  • トークナイザー: jieba

  • フィルター: cnalphanumonly

現在は簡体字中国語辞書をデフォルトで使用しています。

実装例

組み込みアナライザーを使用するには、フィールドスキーマを定義するときに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: 言語に基づいてトークナイザーを選択

コンテンツの主言語に基づいてトークナイザーを選択してください:

西欧言語

スペース区切り言語の場合、以下のオプションがあります:

トークナイザー

動作方法

最適な用途

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

Unicode対応のトークン化(国際コンポーネントのUnicode)

混合スクリプト、未知の言語、または単純なトークン化で十分な場合

  • 入力: "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

独立した句読点トークンを削除

jiebalinderaicuトークナイザーのクリーン出力(句読点が単独のトークンとして返されるため)

  • 入力: ["Hello", "!", "world"]

  • 出力: [['Hello'], ['world']]

alphanumonly

文字と数字のみを保持

技術コンテンツ、クリーンテキスト処理

  • 入力: ["user123", "test@email.com"]

  • 出力: [['user123'], ['test', 'email', 'com']]

length

指定された長さ範囲外のトークンを削除

ノイズのフィルタリング(過度に長いトークン)

  • 入力: ["a", "very", "extraordinarily"]

  • 出力: [['a'], ['very'], []]max=10の場合)

regex

カスタムパターンベースのフィルタリング

ドメイン固有のトークン要件

  • 入力: ["test123", "prod456"]

  • 出力: [[], ['prod456']]expr="^prod"の場合)

言語固有のフィルター

これらのフィルターは、特定の言語特性を処理します:

フィルター

言語

動作方法

decompounder

ドイツ語

合成語を検索可能な構成要素に分割

  • 入力: ["dampfschifffahrt"]

  • 出力: [['dampf', 'schiff', 'fahrt']]

cnalphanumonly

中国語

中国語文字+英数字を保持

  • 入力: ["Hello", "世界", "123", "!@#"]

  • 出力: [['Hello'], ['世界'], ['123'], []]

cncharonly

中国語

中国語文字のみを保持

  • 入力: ["Hello", "世界", "123"]

  • 出力: [[], ['世界'], []]

ステップ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 コンソールから直接テキストアナライザーを構成およびテストできます。