AliNLP トークン化プラグイン (analysis-aliws とも呼ばれます) は、Alibaba Cloud Elasticsearch の組み込みプラグインです。このプラグインを Elasticsearch クラスターにインストールすると、アナライザーとトークナイザーがクラスターに統合され、ドキュメントの分析と取得が実装されます。このプラグインでは、カスタマイズされた辞書ファイルをアップロードできます。アップロード後、システムは Elasticsearch クラスターのローリングアップデートを実行して、辞書ファイルを適用します。
はじめに
analysis-aliws プラグインがインストールされると、次のアナライザーとトークナイザーがデフォルトで Elasticsearch クラスターに統合されます。アナライザーとトークナイザーを使用してドキュメントを検索できます。また、カスタマイズされた辞書ファイルをプラグインにアップロードすることもできます。
アナライザー: aliws。機能語、機能句、または記号は返しません。
トークナイザー: aliws_tokenizer
詳細については、「aliws アナライザーを使用してドキュメントを検索する」および「辞書を設定する」をご参照ください。
analysis-aliws プラグインを使用して期待される結果が得られない場合は、「アナライザーをテストする」および「トークナイザーをテストする」の手順に基づいて障害のトラブルシューティングを行ってください。
トークナイザーをカスタマイズできます。詳細については、「トークナイザーをカスタマイズする」をご参照ください。
前提条件
analysis-aliws プラグインがインストールされています。デフォルトではインストールされていません。プラグインのインストール方法の詳細については、「組み込みプラグインをインストールおよび削除する」をご参照ください。
制限事項
Elasticsearch クラスターのデータノードのメモリサイズは 8 GiB 以上である必要があります。クラスター内のデータノードのメモリサイズが要件を満たしていない場合は、クラスターの構成をアップグレードしてください。詳細については、「クラスターの構成をアップグレードする」をご参照ください。
Elasticsearch V5.X クラスター、Elasticsearch V8.X クラスター、および Elasticsearch Kernel-enhanced Edition クラスターは、analysis-aliws プラグインをサポートしていません。Elasticsearch コンソールで、クラスターがプラグインをサポートしているかどうかを確認できます。
aliws アナライザーを使用してドキュメントを検索する
Elasticsearch クラスターの Kibana コンソールにログインし、プロンプトに従って Kibana コンソールのホームページに移動します。
Kibana コンソールへのログイン方法の詳細については、「Kibana コンソールにログインする」をご参照ください。
説明この例では、Elasticsearch V6.7.0 クラスターを使用しています。他のバージョンのクラスターでの操作は異なる場合があります。コンソールでの実際の操作が優先されます。
表示されるページの左側のナビゲーションペインで、[dev Tools] をクリックします。
表示されるページの [console] タブで、次のいずれかのコマンドを実行してインデックスを作成します。
V7.0 より前のバージョンの Elasticsearch クラスターのコマンド
PUT /index { "mappings": { "fulltext": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } } }
V7.0 以降の Elasticsearch クラスターのコマンド
PUT /index { "mappings": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } }
この例では、index という名前のインデックスが作成されます。V7.0 より前のバージョンでは、インデックスのタイプは fulltext です。V7.0 以降では、インデックスのタイプは _doc です。インデックスには content プロパティが含まれています。プロパティのタイプは text です。さらに、aliws アナライザーがインデックスに追加されます。
コマンドが正常に実行されると、次の結果が返されます。
{ "acknowledged": true, "shards_acknowledged": true, "index": "index" }
次のコマンドを実行して、ドキュメントを追加します。
重要次のコマンドは、V7.0 より前のバージョンの Elasticsearch クラスターにのみ適しています。V7.0 以降の Elasticsearch クラスターの場合は、fulltext を _doc に変更する必要があります。
POST /index/fulltext/1 { "content": "I like go to school." }
前のコマンドは、1 という名前のドキュメントを追加し、ドキュメントの content フィールドの値を I like go to school. に設定します。
コマンドが正常に実行されると、次の結果が返されます。
{ "_index": "index", "_type": "fulltext", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
次のコマンドを実行して、ドキュメントを検索します。
重要次のコマンドは、V7.0 より前のバージョンの Elasticsearch クラスターにのみ適しています。V7.0 以降の Elasticsearch クラスターの場合は、fulltext を _doc に変更する必要があります。
GET /index/fulltext/_search { "query": { "match": { "content": "school" } } }
前のコマンドは、aliws アナライザーを使用して fulltext タイプのすべてのドキュメントを分析し、content フィールドに school が含まれているドキュメントを返します。
コマンドが正常に実行されると、次の結果が返されます。
{ "took": 5, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 0.2876821, "hits": [ { "_index": "index", "_type": "fulltext", "_id": "2", "_score": 0.2876821, "_source": { "content": "I like go to school." } } ] } }
analysis-aliws プラグインを使用して期待される結果が得られない場合は、「アナライザーをテストする」および「トークナイザーをテストする」の手順に基づいて障害のトラブルシューティングを行ってください。
辞書を設定する
analysis-aliws プラグインでは、aliws_ext_dict.txt という名前のカスタマイズされた辞書ファイルをアップロードできます。カスタマイズされた辞書ファイルをアップロードすると、Elasticsearch クラスター内のすべてのノードが自動的にファイルをロードします。この場合、システムはクラスターを再起動しません。
analysis-aliws プラグインをインストールした後、辞書ファイルは提供されません。カスタマイズされた辞書ファイルを手動でアップロードする必要があります。
カスタマイズされた辞書ファイルをアップロードする前に、辞書ファイルが次の要件を満たしていることを確認する必要があります。
名前: aliws_ext_dict.txt。
エンコード形式: UTF-8。
コンテンツ: 各行には 1 つの単語が含まれ、
\n
(UNIX または Linux の改行) で終わります。この単語の前後に空白文字は使用されません。辞書ファイルが Windows で生成された場合は、アップロードする前に dos2unix ツールを使用してファイルを変換する必要があります。
Alibaba Cloud Elasticsearch コンソール にログインします。
左側のナビゲーションペインで、[elasticsearch クラスター] をクリックします。
目的のクラスターに移動します。
上部のナビゲーションバーで、クラスターが属するリソースグループとクラスターが存在するリージョンを選択します。
[elasticsearch クラスター] ページで、クラスターを見つけて ID をクリックします。
表示されるページの左側のナビゲーションペインで、 を選択します。
[組み込みプラグイン] タブで、analysis-aliws プラグインを見つけて、辞書を設定[アクション] 列の をクリックします。
[辞書を設定] パネルの左下隅にある [設定] をクリックします。
辞書ファイルをアップロードする方法を選択します。次に、次の手順に基づいて辞書ファイルをアップロードします。
[TXT ファイル]: この方法を選択した場合は、[TXT ファイルをアップロード] をクリックし、オンプレミスマシンからアップロードするファイルを選択します。
[OSS ファイルを追加]: この方法を選択した場合は、[バケット名] パラメーターと [ファイル名] パラメーターを設定し、[追加] をクリックします。
指定したバケットが Elasticsearch クラスターと同じリージョンにあることを確認してください。Object Storage Service (OSS) に保存されている辞書の内容が変更された場合は、辞書ファイルを再度アップロードする必要があります。
説明analysis-aliws では、1 つの辞書ファイルのみをアップロードできます。辞書ファイルを更新する場合は、辞書ファイル名 aliws_ext_dict.txt の横にある [x] をクリックして辞書ファイルを削除します。次に、新しい辞書ファイルをアップロードします。
[保存] をクリックします。
システムはクラスターを再起動しませんが、ローリングアップデートを実行して、アップロードされた辞書ファイルを有効にします。アップデートには約 10 分かかります。
説明アップロードされた辞書ファイルをダウンロードする場合は、ファイルに対応する
アイコンをクリックします。
アナライザーをテストする
次のコマンドを実行して、aliws アナライザーをテストします。
GET _analyze
{
"text": "I like go to school.",
"analyzer": "aliws"
}
コマンドが正常に実行されると、次の結果が返されます。
{
"tokens" : [
{
"token" : "i",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 0
},
{
"token" : "like",
"start_offset" : 2,
"end_offset" : 6,
"type" : "word",
"position" : 2
},
{
"token" : "go",
"start_offset" : 7,
"end_offset" : 9,
"type" : "word",
"position" : 4
},
{
"token" : "school",
"start_offset" : 13,
"end_offset" : 19,
"type" : "word",
"position" : 8
}
]
}
トークナイザーをテストする
次のコマンドを実行して、aliws_tokenizer トークナイザーをテストします。
GET _analyze
{
"text": "I like go to school.",
"tokenizer": "aliws_tokenizer"
}
コマンドが正常に実行されると、次の結果が返されます。
{
"tokens" : [
{
"token" : "I",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 0
},
{
"token" : " ",
"start_offset" : 1,
"end_offset" : 2,
"type" : "word",
"position" : 1
},
{
"token" : "like",
"start_offset" : 2,
"end_offset" : 6,
"type" : "word",
"position" : 2
},
{
"token" : " ",
"start_offset" : 6,
"end_offset" : 7,
"type" : "word",
"position" : 3
},
{
"token" : "go",
"start_offset" : 7,
"end_offset" : 9,
"type" : "word",
"position" : 4
},
{
"token" : " ",
"start_offset" : 9,
"end_offset" : 10,
"type" : "word",
"position" : 5
},
{
"token" : "to",
"start_offset" : 10,
"end_offset" : 12,
"type" : "word",
"position" : 6
},
{
"token" : " ",
"start_offset" : 12,
"end_offset" : 13,
"type" : "word",
"position" : 7
},
{
"token" : "school",
"start_offset" : 13,
"end_offset" : 19,
"type" : "word",
"position" : 8
},
{
"token" : ".",
"start_offset" : 19,
"end_offset" : 20,
"type" : "word",
"position" : 9
}
]
}
トークナイザーをカスタマイズする
analysis-aliws プラグインがデータのトークン化を実行した後、次のフィルターがデータに関連する操作を実行します: stemmer、lowercase、porter_stem、および stop。これらのフィルターをカスタムトークナイザーに使用する場合、analysis-aliws プラグインのトークナイザー aliws_tokenizer をカスタムトークナイザーに追加し、ビジネス要件に基づいてフィルター設定を追加できます。次のコードは例を示しています。stopwords フィールドを使用してストップワードを設定できます。
PUT my-index-000001 { "settings": { "analysis": { "filter": { "my_stop": { "type": "stop", "stopwords": [ " ", ",", ".", " ", "a", "of" ] } }, "analyzer": { "my_custom_analyzer": { "type": "custom", "tokenizer": "aliws_tokenizer", "filter": [ "lowercase", "porter_stem", "my_stop" ] } } } } }
説明フィルターが不要な場合は、フィルター設定を削除できます。
aliws_tokenizer では、シノニムを使用してカスタムトークナイザーを設定できます。設定方法は、analysis-ik プラグインで使用される方法と同じです。詳細については、「シノニムを使用する」をご参照ください。
FAQ
トークナイザー aliws_tokenizer を使用して単語をトークン化した後、単語の最後の文字が欠落しています。たとえば、
iPhone
とChinese
のトークン化結果はIphon
とchines
です。最後の文字e
が欠落しています。どうすればよいですか?原因: aliws_tokenizer は、トークン化後に単語のステミングを実行します。その結果、各単語の最後の文字
e
が削除されます。解決策: 次のコマンドを実行します。このコマンドでは、分析設定部分に my_custom_analyzer フィールドが指定され、フィルター設定部分が削除されています。
PUT my-index1 { "settings": { "number_of_shards": 1, "analysis": { "analyzer": { "my_custom_analyzer": { "type": "custom", "tokenizer": "aliws_tokenizer" } } } } }
検証: 次のコマンドを実行して、トークン化結果が期待どおりであるかどうかを確認します。
GET my-index1/_analyze { "analyzer": "my_custom_analyzer", "text": ["iphone"] }
参照資料
Alibaba Cloud Elasticsearch が提供するプラグインの詳細については、「プラグインの概要」をご参照ください。
API 操作を呼び出して組み込みプラグインをインストールする方法の詳細については、「InstallSystemPlugin」をご参照ください。
API 操作を呼び出して analysis-aliws プラグインの辞書ファイルを更新する方法の詳細については、「UpdateAliwsDict」をご参照ください。
API 操作を呼び出して Elasticsearch クラスターにインストールされているプラグインを取得する方法の詳細については、「ListPlugins」をご参照ください。