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

ユースケースに適したアナライザーの選択

このガイドは、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 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つのトークンとして処理される。

組み込み chinese アナライザーを使用。

技術文書

❌ いいえ

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

whitespace トークナイザーと alphanumonly フィルターでカスタムアナライザーを作成。

フランス語/スペイン語などスペースで区切られた言語

⚠️ たぶん

アクセント付き文字 (café vs. cafe) が一致しない可能性。

より良い結果を得るために asciifolding でカスタムアナライザーを使用することを推奨。

多言語または不明な言語

❌ いいえ

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

unicode対応のトークナイズのために icu トークナイザーでカスタムアナライザーを使用。

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

ステップ3: 自分の道を選ぶ

デフォルトのstandard analyzerが不十分な場合、以下の2つの道から選択してください:

  • 道A - 組み込みアナライザーを使用 (すぐに使用できる、言語固有)

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

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

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

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

アナライザー

言語サポート

構成要素

注釈

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対応のトークナイズ (International Components for 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": "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コンソールから直接テキストアナライザーを構成およびテストできます。