ドロップダウンサジェストは、OpenSearch の基本的な機能です。ユーザーが検索クエリを入力する際に、クエリの候補を推奨することで入力効率を高め、関連コンテンツをより迅速に見つけられるように支援します。
概要
ドロップダウンサジェスト機能は、ドキュメントのコンテンツからクエリを抽出します。プレフィックスマッチ、Pinyin (ピンイン) の完全なスペル、Pinyin の頭文字、漢字と Pinyin の混在、形態素解析後のプレフィックス、同音異義語など、中国語のさまざまなマッチング方法に基づいて候補クエリを生成できます。
たとえば、クエリ long dress を次のように検索できます。
中国語の接頭辞:
连, 连衣, …ピンインプレフィックス (フールスペル):
l, li, lian, lianyi, lianyiqun, …Pinyin プレフィックス (頭文字):
l, ly, lyq, …漢字とピンイン:
连yi, 连衣qun, …トークン化後のプレフィックス:
long style, long style dress, dress long, …中国語における同音語や類似した発音の誤字:
连衣群, 联谊群, …
手動介入により、サジェスト結果に影響を与えることもできます。ドロップダウンサジェストの主要なパフォーマンスメトリクスについては、「ドロップダウンサジェストレポート」をご参照ください。
データソース
ドロップダウンサジェストは、アプリケーションのドキュメントとエンドユーザーのクエリからのデータを使用します。ドキュメントとクエリの両方にフィルターを適用できます。
アプリケーションドキュメントからの候補クエリ
各ドロップダウンサジェストモデルのデータソースとして、アプリケーションから最大 3 つのフィールドを選択できます。処理中に、システムはドキュメントのサンプル (最大 100 万件) を選択し、指定されたルールに従って選択されたフィールドを処理して候補クエリを生成します。その後、システムはサブセットを最終的なサジェストとして保持します。サポートされている生成ルールは、抽出 と 元の値を保持 の 2 つです。
抽出:この方式では、膨大な量の自然言語データでトレーニングされた Alibaba 独自の NLP アナライザーを使用します。フィールドのコンテンツに形態素解析を適用し、意味のある用語を抽出し、それらを組み合わせて候補クエリを生成します。このアプローチにより、生成されたサジェストが対応するドキュメントを取得できるようになります。
元の値を保持:この方式では、形態素解析を行わずに、フィールドの生のコンテンツを候補クエリとして使用します。コンテンツが 30 文字を超える場合は、最初の 30 文字に切り捨てられます。この方式は、店舗名、ユーザー名、曲名など、形態素解析を必要としないフィールド、または事前に生成された独自の候補クエリを提供するのに適しています。短く明確なコンテンツを持つフィールドの使用を推奨します。
抽出 ルールを使用する場合、ドロップダウンサジェストモデルに 抽出モデル を指定することもできます。抽出モデルを指定すると、システムは大規模言語モデルを使用して、抽出された候補クエリに対して追加のフィルタリングを実行し、意味のない候補を削除してサジェストの品質を向上させます。抽出モデル はオプションの設定であり、フィールドで 抽出 ルールが使用されている場合にのみ有効です。抽出モデルを有効にすると、モデルが実際に消費したトークン数に基づいて課金されます。課金の詳細については、「課金」をご参照ください。
エンドユーザーのクエリからの候補クエリ
システムは、過去 N 日間 (デフォルトは 7 日間) のユーザーの検索履歴を分析し、検索頻度、平均結果数、過去の用語の重み、最近のクエリ成功率などのメトリクスを考慮します。この分析に基づいて、代表的なクエリを候補サジェストとして選択します。
過去の検索クエリ機能:ドロップダウンサジェスト機能は、過去の検索クエリのオプションもサポートしており、現在のユーザーの過去のクエリ に基づいてサジェストを優先します (リクエストには raw_query と user_id パラメーターが必要です)。過去の検索クエリ機能は拡張機能であり、トレーニングジョブごとに消費される計算時間に基づいてトレーニング料金が発生します。過去の検索クエリ機能は非推奨になりつつあります。このオプションは、ドロップダウンサジェストモデルを作成する際には表示されなくなりました。以下の説明は、この機能が有効になっている既存のモデルにのみ適用されます。
エンドユーザーのクエリデータソースを無効にするには、biz_type=not_exist のように、成立しないクエリフィルター条件を設定します。
過去の検索クエリ機能を有効にした後、パーソナライズされた結果を配信するには、ドロップダウンサジェストリクエストに user_id パラメーターを含める必要があります。
過去の検索クエリは、各ユーザーに固有のものです。システムは user_id パラメーターを使用してユーザーを区別します。たとえば、ユーザー A が最近 dishwasher を検索した場合、再びサジェストとして dishwasher が表示されることがあります。しかし、それを一度も検索したことのないユーザー B のサジェストには、その用語は表示されません。
手動介入
次の方法で、ドロップダウンサジェストに手動で影響を与えることができます。
ブロックリストと許可リストを使用して、候補クエリの結果を管理します。
ソースアプリケーションのドキュメントにフィルター条件を設定します。フィルターを適用すると、システムは条件を満たすドキュメントのみを使用して候補サジェストを生成します。
パラメーター | 説明 |
フィルター条件 | OpenSearch アプリケーションスキーマのフィールドに基づいてフィルター条件を指定します。フィルターは、アプリケーション内のすべてのドキュメントに適用されます。注意:
例: フィルター条件を |
コンソールの [ドロップダウンサジェストモデルの作成] ページで、次の設定を構成できます。
ターゲットアプリケーション:候補サジェストのソースデータを含むアプリケーションを選択します。
モデル名:1〜30 文字の名前を入力します。文字で始まり、大文字、小文字、数字、アンダースコア (_) を含めることができます。名前は、アカウント内のすべてのモデルで一意である必要があります。
トレーニングフィールド:ターゲットアプリケーションからソースフィールドを選択し、各フィールドの処理方法 (抽出 または 元の値を保持) を指定します。
抽出モデル:これはオプションの設定です。現在利用可能な抽出モデルは
deepseek-v4-flashです。抽出モデルを選択すると、システムは大規模言語モデルを使用して抽出された候補クエリをフィルタリングし、意味のない候補を削除します。この設定は、フィールドで 抽出 ルールが使用されている場合にのみ有効です。抽出モデルを有効にすると、モデルが実際に消費したトークン数に基づいて課金されます。ドキュメントフィルター条件とクエリフィルター条件:これらは、アプリケーションドキュメントデータソースとエンドユーザークエリデータソースにそれぞれ適用されるフィルター条件です (例:
status=1またはbiz_type=phone)。構文ルールについては、上記のフィルター条件の説明をご参照ください。
サジェスト結果の制御
ブロックリスト:ブロックリストは部分一致をサポートしています。ブロックリストに登録されたキーワードを含むクエリは、ドロップダウンサジェストの結果から除外されます。望ましくないサジェストが表示された場合は、関連するキーワードをブロックリストに追加してブロックします。
許可リスト:許可リスト内のクエリが推奨基準を満たしている場合、ドロップダウンサジェストの結果で優先されます。高品質のクエリが表示されない、またはランクが低すぎる場合は、それらを許可リストに追加して可視性を高めます。ブロックリストと許可リストの設定方法の詳細については、こちらをご参照ください。
標準アプリケーションはドロップダウンサジェストをサポートしていません。この機能は、拡張アプリケーションでのみ利用可能です。
アプリケーションごとに最大 10 個のドロップダウンサジェストモデルを作成できます。
モデル名は、アカウント内で一意である必要があります。これには、ドロップダウンサジェスト、人気モデル、カテゴリ予測モデル、トレンドモデル、ヒントモデルが含まれます。
ドロップダウンサジェストのデータソースとして使用できるのは、インデックスが作成された
TEXT、SHORT_TEXT、LITERAL、または INT型のフィールドのみです。単一のモデルに対して、最大 3 つのトレーニングフィールドを選択できます。
アプリケーションスキーマを変更する際、ドロップダウンサジェストモデルが使用するフィールドは変更できません。
ドロップダウンサジェストモデルをトレーニングするには、アプリケーションテーブル (
raw_queryと格納データを含む) に 1,000 件以上のエントリが含まれている必要があります。そうでない場合、データ不足が原因でモデルトレーニングが失敗する可能性があります。アプリケーションを削除すると、関連するドロップダウンサジェストモデルも削除されます。
ドロップダウンサジェスト検索では、
queryパラメーターの最大長は UTF-8 エンコーディングで 30 バイト (漢字で最大 10 文字) です。制限を超えた場合、システムからエラーが報告され、結果は返されません。ドロップダウンサジェスト検索では、
hitパラメーターは 1 以上 30 以下の整数である必要があります。この範囲外の値 (0、-1、31 など) を指定した場合、システムはデフォルト値の 30 を使用し、エラーメッセージを返します。ブロックリストには、最大 500 個のキーワードを含めることができます。
許可リストには、最大 500 個のクエリを含めることができます。
ブロックリストと許可リストの間に競合がある場合、ブロックリストが優先されます。
ブロックリストと許可リストへの変更はリアルタイムで有効になります。
ドロップダウンサジェストモデルが作成されると、デフォルトで毎日の定期トレーニングが有効になります。サジェストデータは、各トレーニングサイクルで定期的に更新されます。
ドロップダウンサジェストモデルのトレーニング時間は、データ量とシステムの負荷によって異なります。トレーニングに 30 分以上かかる場合は、お問い合わせください。
中国語の同音異義語マッチング機能は、デフォルトで有効になっています。リクエストにパラメーター
re_search="disable"を追加することで、この機能を無効にできます。基本的なドロップダウンサジェスト機能は現在無料です。コンピューティングおよびストレージリソースはシステムによって割り当てられます。各モデルには、約 100 QPS のコンピューティングリソースと、約 200 万件の候補クエリ用のストレージが割り当てられます。
ユーザーが入力した元のクエリをシステムが識別しやすくするために、検索リクエストで
raw_queryパラメーターを設定することを推奨します。詳細については、「検索処理」をご参照ください。過去の検索クエリ 機能を有効にすると、消費された計算時間に基づいて各トレーニングジョブに課金されます。詳細については、「課金」をご参照ください (この機能は非推奨になりつつあり、モデル作成時には表示されなくなりました)。
抽出モデル を設定すると、モデルが実際に消費したトークン数に基づいて課金されます。詳細については、「課金」をご参照ください。
raw_query、user_id、およびfrom_request_idパラメーターの詳細については、こちらをご参照ください。デフォルトで 高頻度検索クエリ 機能を有効にするには、検索リクエストに
raw_queryパラメーターを含めるか、query 句 にデフォルトインデックスを含める必要があります。独立した raw_query: トレーニングのプロモーションに必要な
raw_queryパラメーターは、結果を返す一意のクエリである必要があります。サジェストモデルのトレーニングデータは毎日更新されます (T+1)。特定の日にアップロードされたデータは、翌日のトレーニングが完了した後に有効になります。
モデルトレーニング失敗のトラブルシューティング
ドロップダウンサジェストモデルのトレーニングが失敗した場合は、次の手順に従ってトラブルシューティングを行ってください。
異常レポートの確認:モデル詳細ページの [基本情報] エリアで、[最新バージョンのステータス] を確認します。ステータスが「トレーニング失敗」または「データ異常」の場合、そのエリアに [異常レポート] のツールチップが表示されます。ツールチップにカーソルを合わせると、例外の詳細と解決策が表示されます。この情報に基づいてトレーニング失敗の原因を特定します。
完全性レベルとアップグレード条件の確認:モデル詳細ページの [データ検証] エリアで、[完全性レベル] と対応する [アップグレード条件] を確認します。アップグレード条件に基づいてデータを調整して完全性レベルを向上させ、モデルを再トレーニングします。
T-1 (前日) データロジック:モデルのトレーニングでは、前日 (T-1) の統計データを使用します。新しく作成されたモデルが最初のトレーニングジョブを実行する際、前日のデータがまだ利用できないため、システムが "Training field does not exist" エラーを報告することがあります。データが利用可能になる翌日まで待ってから、モデルを再トレーニングしてください。
データ量の要件 (L1 条件):モデルのトレーニングには、次の最小データしきい値が必要です。
合計データ量 (
raw_queryデータとアプリケーションドキュメントデータの合計) は、1,000 以上である必要があります。一意の
raw_queryの値の数は 100 を超える必要があります。
フィルター条件のフォーマットチェック:フィルター条件のフォーマットの誤りは、トレーニング失敗の一般的な原因です。フィールド名は、インデックス作成済みのアプリケーションスキーマで定義されたフィールドと一致する必要があります。サポートされている演算子は、<、>、<=、>=、=、!= です。複数の条件は AND 関係にあり、カンマ (,) で区切る必要があります。完全なフィルター条件の構文については、上記の [手動介入] セクションをご参照ください。
ベストプラクティス
ドロップダウンサジェストの効果 (たとえば、サジェストによって誘導される検索やクリックスルー率の向上) を高めるには、サジェストリクエストと検索リクエストを関連付けることを推奨します。手順については、このトピックの最後にある「サジェストリクエストと検索リクエストの関連付け」セクションをご参照ください。
ドキュメントの主要なトピックに関連する、簡潔なコンテンツを持つフィールドを選択してください。
ニーズに応じて、抽出ルールと元の値を保持するルールを適切に使い分けてください。
レスポンスでは、
suggestionsには検索結果が含まれ、errorsはエラーが発生したかどうかを示します。errorsフィールドが空でなくても、suggestionsフィールドが空であるとは限りません。したがって、レスポンスをパースする際は、suggestionsが空かどうかを確認してデータを表示するかどうかを判断してください。
操作手順
1. コンソールで、[検索アルゴリズムセンター] > [検索ガイダンス] > [ドロップダウンサジェスト] に移動し、[作成] をクリックします。
2. [モデル名] を入力し、[トレーニングフィールド] と抽出方法を選択し、[抽出モデル] を選択し (オプション)、[フィルター条件] を入力し (オプション)、[送信] をクリックします。
3. [ドロップダウンサジェスト] リストページでモデルを見つけ、[トレーニング] をクリックしてトレーニングを開始します。
4. 通常、トレーニングの完了には 20 分から 30 分かかります。
5. モデルのトレーニングが完了したら、サジェストをテストできます。以下に、元の値を保持 メソッドの例を示します。
元の値を保持:
モデル詳細ページの右上隅にある [効果プレビュー] ボタンをクリックします。ポップアップ表示される検索ボックスにクエリ (例:文字 E) を入力します。一致するサジェスト (「Eifini」や「ELF SACK」など) が下に表示されます。右側で、[ユーザー ID] と [表示数] パラメーターを設定できます。
6. オンラインで候補クエリを照会するには、以下のデモをご参照ください。詳細な API 情報については、「ドロップダウンサジェスト開発ガイド」をご参照ください。
ドロップダウンサジェストページの参照
[ドロップダウンサジェスト] リストページ
OpenSearch コンソールで、[検索アルゴリズムセンター] > [検索ガイダンス] > [ドロップダウンサジェスト] に移動して、リストページにアクセスします。
リストページには、[モデル名]、[作成日時]、[モデルステータス]、[最終トレーニング開始日時]、[最新バージョンのステータス] (「トレーニング待ち」、「スケジューリング中」、「トレーニング中」、「トレーニング成功」、「トレーニング失敗」、または「データ異常」) など、各ドロップダウンサジェストモデルの情報が表示されます。[操作] 列では、モデルの詳細の表示、トレーニング、その他の操作を実行できます。
[ドロップダウンサジェストモデル] 詳細ページ
モデル詳細ページの上部には、作成日時、モデルステータス、最新バージョンのステータスを表示する [基本情報] エリアがあります。右上隅には [効果プレビュー] ボタンがあります。ページには、[ドロップダウンサジェスト]、[トレンドとヒント]、[ブロックリスト/許可リスト] の 3 つのタブが含まれています。
[基本情報] エリアには、モデルの作成日時、モデルステータス、最終トレーニング開始日時、最新バージョンのステータスが表示されます。ステータスが「トレーニング失敗」または「データ異常」の場合、このエリアに [異常レポート] のツールチップが表示されます。
[設定情報] セクションには、設定済みのトレーニングフィールドとその処理方法、抽出モデル、Doc フィルター条件、Query フィルター条件、ブロックリスト/許可リスト、およびスケジュールされたタスクが表示されます。右上隅の [設定] ボタンをクリックして、これらの設定を変更します。
[データ検証] セクションには、モデルトレーニングのデータ完全性と完全性レベルが表示されます。
[トレーニング履歴] セクションには、モデルのトレーニング記録が表示されます。
コアメトリクスデータ
さまざまな期間を選択して、ドロップダウンサジェストモデルのコアメトリクスをテーブルと折れ線グラフで表示できます。
注意:特定のメトリクスの定義については、「ドロップダウンサジェストレポート」をご参照ください。
SDK デモ
API:
GET v3/openapi/suggestions/{suggestion_name}/actions/search?hit=10&query={your_query}&re_search=homonym&user_id=xxxJava SDK Maven 依存関係:
<dependency>
<groupId>com.aliyun.opensearch</groupId>
<artifactId>aliyun-sdk-opensearch</artifactId>
<version>4.0.0</version>
</dependency>関連リンク:リリースノート
コードサンプル:
package com.example.opensearch;
import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.SuggestionClient;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.nio.charset.Charset;
public class SuggestDemo {
// ご自身の認証情報を設定します。
static private final String accesskey = "ご自身の AccessKey ID を入力";
static private final String secret = "ご自身の AccessKey Secret を入力";
static private final String host = "アプリケーションがデプロイされているリージョンに対応するエンドポイント";
// 検索パラメーターを設定します。
static private final String suggestionName = "ご自身のドロップダウンサジェストモデル名";
static private final byte hits = 8; // 返されるサジェストの最大数
OpenSearch openSearch;
OpenSearchClient openSearchClient;
@Before
public void setUp() {
// OpenSearch オブジェクトを初期化します。
openSearch = new OpenSearch(accesskey, secret, host);
openSearchClient = new OpenSearchClient(openSearch);
}
@Test
public void TestEnv() {
// ファイルとデフォルトのエンコーディング形式を表示します。
System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));
// SuggestionClient オブジェクトを作成します。
SuggestionClient suggestionClient = new SuggestionClient("ご自身のアプリ名", suggestionName, openSearchClient);
String query = "ご自身の検索クエリを入力";
try {
SuggestParams suggestParams = new SuggestParams();
suggestParams.setQuery(query); // 検索クエリを設定します。
suggestParams.setHits(10); // 返されるサジェストの最大数を設定します。
suggestParams.setUserId("12345678"); // ユーザー ID を設定します。
// 中国語の同音異義語マッチングはデフォルトで有効です。
// 無効にする場合は、次の行のコメントを解除してください。
// suggestParams.setReSearch(ReSearch.findByValue(1)); // ReSearch.findByValue(1) は無効化を意味します。
SearchResult result = suggestionClient.execute(suggestParams);
System.out.println(result); // 結果を出力します。
} catch (OpenSearchException e) {
e.printStackTrace();
} catch (OpenSearchClientException e) {
e.printStackTrace();
}
}
@After
public void clean() {
openSearch.clear();
}
}ドロップダウンサジェストの Java SDK の詳細については、「ドロップダウンサジェストのデモ」をご参照ください。
レスポンス例:
{
"request_id": "159851481919726888064081",
"searchtime": 0.006246,
"suggestions": [
{
"suggestion": "trendy skirts"
},
{
"suggestion": "dresses for petite women"
},
{
"suggestion": "polka dot dresses"
},
{
"suggestion": "youthful skirts"
},
{
"suggestion": "polka dot skirt"
},
{
"suggestion": "skirts for petite women"
},
{
"suggestion": "polka dot skirts for petite women"
}
]
}注: レスポンスで返される request_id を使用して、サジェストを後続の検索リクエストに関連付けることができます。
サジェストリクエストと検索リクエストの関連付け
サジェストリクエストと検索リクエストを関連付けると、次のようなメリットがあります。
ドロップダウンサジェストが検索パフォーマンスに与える影響を測定するためのメトリクスを収集できます。これらのメトリクスには、サジェストによって誘導された検索の PV、クリックスルー率、ゼロ/低結果率などが含まれます。詳細については、「ドロップダウンサジェストレポート」をご参照ください。
関連付けられたリクエストデータは、サジェストのクリックデータなどのインサイトを提供します。これらのインサイトは、サジェストのランキングモデルを最適化し、サジェストによって誘導される検索の効果を向上させるために使用できます。
関連付け方法:
ユーザーがドロップダウンの候補を選択して検索を開始した場合、検索リクエストに
from_request_id={from_request_id}パラメーターを含めてください。from_request_idパラメーターは検索のソースを示します。現在のクエリが、ドロップダウンの候補、トップ検索モデル、ヒントモデルなどの推奨リストに由来する場合、その推奨リクエストのrequest_idをこのパラメーターに割り当てることができます。これらのイベントを関連付けることで、上流の機能の主要なメトリクスを計算し、その効果を測定し、最適化のためのデータを収集できます。このパラメーターは、検索処理ドキュメントでも説明されています。
例:
ドロップダウンサジェスト API コールから request_id として 159851481919726888064081 が返されたとします。この ID は、以下に示すように検索リクエストに関連付けることができます。
SearchParams searchParams = new SearchParams(config);
// ドロップダウンサジェストから誘導されたクエリ
searchParams.setQuery("title:'skirts for petite women'");
// from_request_id パラメーターを追加します。
Map<String, String> customParam =new HashMap<>();
customParam.put("from_request_id","159851481919726888064081");
searchParams.setCustomParam(customParam);
// クエリを実行し、SearchResult オブジェクトを取得します。
SearchResult execute = searcherClient.execute(searchParams);
// 結果を文字列として取得します。
String result = execute.getResult();
System.out.println(result);