AliNLP トーカーナイザープラグイン (analysis-aliws) は、Alibaba Cloud Elasticsearch (ES) の組み込みシステムプラグインです。このプラグインをインストールすると、Alibaba Cloud ES はドキュメント分析と検索のために対応するアナライザーとトーカーナイザーを統合します。また、辞書設定機能を使用して辞書をホットアップデートすることもできます。
プラグインの概要
analysis-aliws プラグインをインストールすると、ES にはデフォルトで次のアナライザーとトーカーナイザーが含まれます。これらを使用してドキュメントを検索したり、辞書設定機能を使用してトーカーナイザーの辞書を更新したりできます。
アナライザー: aliws アナライザーは、機能語、機能語句、記号を保持します。また、すべての英大文字を自動的に小文字に変換します。
トーカーナイザー: aliws_tokenizer
詳細については、「aliws アナライザーを使用したドキュメントの検索」および「辞書の設定」をご参照ください。
analysis-aliws プラグインが期待どおりの結果を返さない場合は、「アナライザーのテスト」と「トーカーナイザーのテスト」を使用して問題をトラブルシューティングできます。
カスタムトーカーナイザーを構築するには、「カスタムトーカーナイザーの構築」をご参照ください。
前提条件
analysis-aliws プラグインがインストール済みであること。このプラグインはデフォルトではインストールされません。インストール手順については、「組み込みプラグインのインストールとアンインストール」をご参照ください。
プラグインをインストールまたはアンインストールすると、クラスターのローリングリスタートがトリガーされます。ノードが一度に 1 つずつ再起動されるため、クラスターのステータスは緑から黄色に変わります。クラスターは引き続き利用可能ですが、正常なノードへの負荷が増加し、パフォーマンスに影響が出る可能性があります。この操作はオフピーク時に実行してください。
制限事項
Elasticsearch クラスター内のデータノードのメモリサイズは 8 GB 以上である必要があります。データノードのメモリサイズがこの要件を満たさない場合は、クラスターをアップグレードしてください。詳細については、「クラスター設定のアップグレード」をご参照ください。
Elasticsearch V5.X クラスター、Elasticsearch V8.X クラスター、および Elasticsearch Kernel-enhanced Edition クラスターは、analysis-aliws プラグインをサポートしていません。お使いのクラスターがこのプラグインをサポートしているかどうかは、Elasticsearch コンソールで確認できます。
aliws アナライザーを使用したドキュメントの検索
対象の Alibaba Cloud Elasticsearch インスタンスの Kibana コンソールにログインし、画面の指示に従って Kibana のホームページを開きます。
詳細については、「Kibana コンソールへのログイン」をご参照ください。説明このトピックでは、Alibaba Cloud Elasticsearch 6.7.0 を例として使用します。他のバージョンでは操作が若干異なる場合があります。実際のコンソール画面を基準にしてください。
左側メニューで、[開発ツール] をクリックします。
[Console] で、次のいずれかのコマンドを実行してインデックスを作成します。
7.0 より前のバージョン
PUT /index { "mappings": { "fulltext": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } } }バージョン 7.0 以降
PUT /index { "mappings": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } }上記の例では、index という名前のインデックスを作成し、タイプは fulltext (バージョン 7.x では _doc) となります。このインデックスには、text 型の content プロパティが含まれ、aliws アナライザーが使用されます。
コマンドが正常に実行されると、次の結果が返されます。
{ "acknowledged": true, "shards_acknowledged": true, "index": "index" }次のコマンドを実行してドキュメントを追加します。
重要次のコマンドは、Elasticsearch 7.0 より前のバージョンにのみ適用されます。バージョン 7.0 以降では、fulltext を _doc に変更してください。
POST /index/fulltext/1 { "content": "I like go to school." }上記のコマンドは、ID 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 }次のコマンドを実行してドキュメントを検索します。
次のコマンドは、Elasticsearch 7.0 より前のバージョンにのみ適用されます。バージョン 7.0 以降では、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": "1",
"_score": 0.2876821,
"_source": {
"content": "I like go to school."
}
}
]
}
}analysis-aliws プラグインからの結果が期待どおりでない場合は、以下の「アナライザーのテスト」と「トーカーナイザーのテスト」を使用して問題をトラブルシューティングしてください。
辞書の設定
analysis-aliws プラグインは辞書設定をサポートしています。aliws_ext_dict.txt という名前のカスタム辞書ファイルをアップロードできます。ファイルをアップロードすると、クラスター内のすべてのノードが自動的にファイルをロードし、クラスターを再起動することなく辞書をホットアップデートします。
analysis-aliws プラグインをインストールした後、辞書ファイルは提供されません。カスタム辞書ファイルを手動でアップロードする必要があります。
辞書ファイルをアップロードする前に、ファイルが次の要件を満たしていることを確認してください。
ファイル名: aliws_ext_dict.txt である必要があります。
ファイル形式: UTF-8 エンコーディングを使用する必要があります。
内容: 各行には、先頭または末尾に空白文字を含まない 1 つのタームを記述する必要があります。UNIX または Linux の改行コード (
\n) を使用してください。Windows でファイルを作成した場合は、アップロードする前に Linux マシンで dos2unix ツールを使用して辞書ファイルを変換してください。
Alibaba Cloud Elasticsearch コンソールにログインします。
左側メニューで、Elasticsearch クラスター をクリックします。
対象のインスタンスを開きます。
a. メニューバーで、リソースグループとリージョンを選択します。 b. [Elasticsearch クラスター] で対象インスタンスの ID をクリックします。左側メニューで、設定と管理 > プラグイン設定 を選択します。
ビルトインプラグインリスト で、analysis-aliws プラグインを見つけます。その Actions 列で、辞書設定 をクリックします。
辞書設定 ページの下部で、設定 をクリックします。
辞書ファイルをアップロードする方法を選択し、ファイルをアップロードします。
TXT ファイル: TXT ファイルのアップロード をクリックし、ローカルの辞書ファイルを選択してアップロードします。
OSS ファイルの追加: Bucket 名とファイル名を入力し、追加 をクリックします。
Bucket と Alibaba Cloud Elasticsearch インスタンスが同じリージョンにあることを確認してください。ソース OSS ファイルの内容が変更された場合、変更を有効にするには辞書ファイルを再度アップロードする必要があります。自動同期はサポートされていません。
説明analysis-aliws プラグインは 1 つの辞書ファイルのみをサポートします。辞書ファイルを更新するには、aliws_ext_dict.txt ファイルの X アイコンをクリックしてアップロード済みの辞書ファイルを削除し、新しいファイルをアップロードします。
Save をクリックします。
保存してもクラスターは再起動しません。代わりに、アップロードされた辞書ファイルを適用するためのクラスター更新がトリガーされます。このプロセスには約 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 プラグインはテキストをトークン化した後、ステマー、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 は、シノニムを使用したカスタムトーカーナイザーの構築をサポートしています。その設定は IK トーカーナイザーの設定と同じです。詳細については、「シノニムの使用」をご参照ください。
FAQ
aliws アナライザーを使用して単語をトークン化すると、最後の文字が欠落することがあります。たとえば、
iPhoneとChineseをトークン化すると、最後のeが削除されてiphonとchinesが返されます。原因: aliws アナライザーは、トークン化の後にステミングフィルターを適用し、最後の
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"] }
関連ドキュメント
ES でサポートされているプラグインを表示するには、「プラグインの概要」をご参照ください。
API を呼び出して組み込みプラグインをインストールするには、「InstallSystemPlugin」をご参照ください。
API を呼び出して analysis-aliws プラグインの辞書ファイルを更新するには、「UpdateAliwsDict」をご参照ください。
API を呼び出して指定された ES インスタンスのプラグインのリストを取得するには、「ListPlugins」をご参照ください。