検索候補機能は、OpenSearch の基本機能です。この機能は、検索クエリを入力するときに選択できる推奨検索クエリを提供します。検索クエリの全内容を入力する前に、目的の検索クエリが見つかる場合があります。この機能を使用すると、目的の検索結果をできるだけ早く取得できます。
概要
OpenSearch は、ドキュメントから検索クエリをインテリジェントに抽出して、検索候補機能を実装します。中国語で検索クエリを入力すると、OpenSearch は、中国語フレーズの最初の数文字、完全なピンインスペル、ピンインの頭字語、漢字とピンイン、分析後の最初の数文字、および中国語の同音異義語に基づいて候補を提供します。
たとえば、次の内容を入力すると、検索クエリ 连衣裙长款 が推奨されます。
中国語フレーズの最初の数文字:
连 and 连衣完全なピンインスペルの最初の数文字:
l, li, lian, lianyi, and lianyiqunピンインの頭字語の最初の数文字:
l, ly, and lyq漢字とピンイン:
连yi, and 连衣qun分析後の最初の数文字:
长款, 长款连衣, and 连衣长中国語の同音異義語:
连衣群 and 联谊群
介入エントリを使用して、検索候補に介入することもできます。OpenSearch は、検索候補の複数のメトリックを提供します。詳細については、「検索候補レポート」をご参照ください。
使用上の注意
データソース
アプリケーションのドキュメントは、検索候補のデータソースとして機能します。アプリケーションから最大 3 つのフィールドを選択して、各検索候補モデルのデータソースとして使用できます。検索候補を提供するために、OpenSearch はアプリケーションから数百万のドキュメントを選択し、指定されたルールに基づいてこれらのドキュメントで選択されたフィールドの値を処理して、推奨検索クエリを生成します。次に、OpenSearch は、指定されたルールに基づいて、検索候補に推奨検索クエリをいくつか表示します。
推奨検索クエリの生成ルール
OpenSearch は、指定された条件に基づいて、過去 N 日間の履歴検索クエリから推奨検索クエリを生成します。たとえば、条件は、履歴検索クエリの用語の重み、取得されたドキュメントの数、または検索回数、あるいは過去 1 日以内に履歴検索クエリの検索結果が返されたかどうかです。デフォルトでは、過去 7 日間の履歴検索クエリを使用して、推奨検索クエリが生成されます。推奨検索クエリを生成するために、OpenSearch は 履歴検索クエリから用語を抽出 するか、元の履歴検索クエリを使用 します。
履歴検索クエリから用語を抽出する: OpenSearch は、Alibaba Cloud の自然言語処理 (NLP) チームによってトレーニングされたアナライザを使用して、検索クエリを分析します。このアナライザは、大量の自然言語データに基づいて開発されています。分析後、OpenSearch は実際に意味を持つ用語を組み合わせて、推奨検索クエリを生成します。これにより、推奨検索クエリに基づいて必要なドキュメントを取得できます。
元の履歴検索クエリを使用する: OpenSearch は、変更を加えずに元の履歴検索クエリを選択して、検索候補の推奨検索クエリとして使用します。履歴検索クエリに 30 文字を超える文字が含まれている場合、OpenSearch は最初の 30 文字のみを保持することで検索クエリを切り捨て、切り捨てられた検索クエリを推奨検索クエリとして使用します。この方法は、店舗名、ユーザー名、曲名など、分析を必要としないアプリケーションフィールドに適用されます。この方法は、変更せずに推奨検索クエリとして使用したいカスタム検索クエリにも適用されます。短く、簡潔で、明示的なフィールドを選択することをお勧めします。
推奨検索クエリは、過去 N 日間 (デフォルトでは 7 日間) の raw_query パラメーターを含む検索リクエストから抽出されます。
手動介入
次の方法で検索候補に介入できます。
ホワイトリストとブラックリストを使用して推奨検索クエリに介入します。
データソースからドキュメントをフィルタリングします。フィルター条件を設定すると、OpenSearch は、条件を満たすアプリケーションドキュメントのみに基づいて推奨検索クエリを生成します。
パラメーター | 説明 |
フィルター条件 | OpenSearch アプリケーションスキーマのフィールドに基づいてフィルター条件を設定する必要があります。設定されたフィルター条件は、現在のアプリケーションのすべてのドキュメントをフィルタリングするために使用されます。次の項目に注意してください。
例: フィルター条件「status=1,level=1」が設定されている場合、条件を満たすドキュメントのみをデータソースとして使用できます。 |
次の図は、OpenSearch コンソールでフィルター条件を設定する方法を示しています。

推奨検索クエリへの介入
ブラックリスト: 推奨検索クエリにブラックリストのキーワードが含まれている場合、推奨検索クエリは検索候補に表示されません。推奨検索クエリがビジネスに適用できない場合は、関連するキーワードをブラックリストに追加できます。この方法では、キーワードを含むすべての推奨検索クエリは検索候補に表示されません。
ホワイトリスト: ホワイトリストの検索クエリが指定された推奨条件を満たしている場合、その検索クエリは検索候補の最上位にランクされます。ビジネスに適用可能な推奨検索クエリのランクが低い場合、または検索候補に含まれていない場合は、検索クエリをホワイトリストに追加できます。これにより、検索候補の質が向上します。ホワイトリストとブラックリストの設定方法の詳細については、「ブラックリストとホワイトリスト」をご参照ください。
標準アプリケーションは検索候補をサポートしていません。この機能は、高度なアプリケーションでのみサポートされています。
アプリケーションごとに最大 10 個の検索候補モデルを作成できます。
同じ Alibaba Cloud アカウントに属するモデル (検索候補モデル、人気モデル、カテゴリ予測モデル、トップ検索モデル、ヒントモデルを含む) の名前は一意である必要があります。
アプリケーションで TEXT、SHORT_TEXT、LITERAL、および INT タイプで、インデックスフィールドとして設定されているフィールドのみをデータソースとして使用できます。
モデルのトレーニングには最大 3 つのフィールドを選択できます。
アプリケーションスキーマを変更する場合、検索候補のデータソースとして使用されているアプリケーションフィールドは変更できません。
検索候補モデルをトレーニングする場合、使用するアプリケーションテーブルには、raw_query パラメーターで指定された検索クエリとアプリケーションに保存されているデータを含む 1,000 を超えるデータエントリが含まれている必要があります。そうでない場合、データの整合性の問題により、モデルのトレーニングが失敗する可能性があります。
アプリケーションを削除すると、アプリケーションの検索候補モデルも削除されます。
検索候補に基づく検索リクエストでは、クエリパラメーターの値は UTF-8 形式でなければならず、30 バイトまたは 10 文字を超えることはできません。そうでない場合、エラーが発生し、データは返されません。
検索候補に基づく検索リクエストでは、hit パラメーターの値は 0 より大きく 30 以下の整数である必要があります。そうでない場合、このパラメーターの値は 30 に修正され、エラーが発生します。たとえば、hit パラメーターが 0、-1、または 31 に設定されている場合、リクエストは hit パラメーターが 30 に設定されているリクエストと同じ方法で処理され、エラーが報告されます。
ブラックリストには最大 500 個のキーワードを含めることができます。
ホワイトリストには最大 500 個の検索クエリを含めることができます。
ホワイトリストの検索クエリにブラックリストのキーワードが含まれている場合、ブラックリストが優先され、検索クエリは検索候補に表示されません。
ブラックリストとホワイトリストの変更はリアルタイムで有効になります。
検索候補モデルが作成されると、システムはデフォルトでモデルのスケジュールされたトレーニングを有効にします。モデルのデータは、トレーニング後に定期的に更新されます。
検索候補モデルのトレーニング時間は、アプリケーションデータのサイズとシステム負荷によって異なります。トレーニング時間が 30 分を超える場合は、OpenSearch チームに連絡してください。
デフォルトでは、OpenSearch は検索クエリの用語を中国語の同音異義語に置き換えることによってもドキュメントを取得します。この機能を無効にするには、検索リクエストで
re_searchパラメーターを disable に設定します。検索候補機能は無料です。OpenSearch は、計算リソースとストレージリソースの固定クォータを提供します。検索候補モデルごとに、OpenSearch は最大 100 クエリ/秒 (QPS) をサポートする計算リソースと最大 200 万件の推奨検索クエリをサポートするストレージリソースを提供します。
OpenSearch が入力した元の検索クエリを認識できるように、検索リクエストで raw_query パラメーターを指定することをお勧めします。詳細については、「検索リクエストを開始する」をご参照ください。
履歴検索クエリ機能を有効にすると、各モデルのトレーニングの課金時間に基づいてトレーニング料金が請求されます。詳細については、「用語」をご参照ください。
raw_query、user_id、および from_request_id パラメーターの詳細については、「検索リクエストを開始する」をご参照ください。
高頻度検索クエリ機能をデフォルトで有効にする場合は、検索リクエストに raw_query パラメーターを含めるか、クエリ句 にデフォルトのインデックスを含める必要があります。
独立した raw_query: モデルのトレーニングのパフォーマンスを向上させるには、検索リクエストで raw_query パラメーターを指定する必要があります。指定された検索クエリは、ドキュメントの取得に使用できる独立した一意の検索クエリである必要があります。
提案
検索候補を最適化するには、検索候補リクエストを検索リクエストに関連付けることをお勧めします。これにより、推奨検索クエリの数とクリック率が増加します。詳細については、このトピックの「検索候補リクエストを検索リクエストに関連付ける」セクションを参照してください。
ドキュメントのトピックに関連する簡潔なフィールドを選択します。
要件に基づいて、履歴検索クエリから用語を抽出するか、変更せずに元の履歴検索クエリを使用します。
検索候補に基づく検索リクエストへの応答では、suggestions パラメーターには推奨検索クエリが含まれています。 errors パラメーターは、エラーが発生したかどうかを示します。 errors パラメーターが返された場合でも、suggestions パラメーターにはデータが含まれている場合があります。 suggestions パラメーターで推奨検索クエリが返された場合、これらの検索クエリは検索候補に表示されます。
手順
1. OpenSearch コンソールにログオンします。左側のナビゲーションウィンドウで、[検索アルゴリズムセンター] > [検索ガイダンス] を選択します。[検索候補] ページで、[作成] をクリックします。
2. [検索候補モデルの作成] ページで、モデル名を入力し、トレーニングフィールドを選択し、各フィールドの抽出方法を選択し、必要に応じて [履歴検索クエリ] をオンにし、必要に応じてフィルター条件を入力して、[送信] をクリックします。
3. [検索候補] ページで、作成された検索候補モデルを見つけ、[操作] 列の [トレーニング] をクリックしてモデルをトレーニングします。

4. トレーニングが完了するまで待ちます。トレーニングは 20 ~ 30 分続きます。
5. 検索候補モデルをテストします。次の図は、抽出方法として [元の値を保持] または [元の値から抽出] を選択した場合の推奨検索クエリを示しています。
元の値を保持

元の値から抽出

6. このトピックの以下の部分のデモで説明されているように、OpenSearch コンソールで推奨検索クエリを取得します。関連する API 操作の詳細については、「検索候補をクエリする」をご参照ください。
詳細ページ
検索候補ページ
OpenSearch コンソールで、左側のナビゲーションウィンドウの [検索アルゴリズムセンター] > [検索ガイダンス] を選択します。次に、次の図に示すように、[検索候補] ページが表示されます。
[検索候補] ページでは、各検索候補モデルの名前、作成時刻、ステータス、および最新バージョンのステータスを表示できます。最新バージョンのステータスには、[トレーニング待機中]、[トレーニング中]、[トレーニング済みおよび合格]、[異常データ] が含まれます。[操作] 列では、モデルの詳細の表示、モデルのトレーニング、およびモデルの削除を行うことができます。
検索候補モデルの詳細ページ
基本情報: このセクションでは、検索候補モデルの作成時刻、ステータス、最新のトレーニング時刻、および最新バージョンのステータスを表示できます。モデルが [異常データ] 状態の場合、このページで例外レポートを表示できます。
設定情報: このセクションでは、検索候補モデルに設定されているトレーニングフィールド、フィルター条件、ホワイトリスト、ブラックリスト、およびスケジュールされたトレーニングと履歴検索クエリ機能が有効になっているかどうかを表示できます。
データ検証: このセクションでは、モデルのデータの整合性と整合性レベルを表示できます。
トレーニング履歴: このセクションでは、モデルのトレーニングレコードを表示できます。
コアメトリックデータ
OpenSearch は、検索候補モデルの主要なメトリックを表と折れ線グラフに表示します。メトリックは時間範囲でフィルタリングできます。
注: メトリックの詳細については、「検索候補レポート」をご参照ください。
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 = "Alibaba Cloud アカウントの AccessKey ID"; // Alibaba Cloud アカウントの AccessKey ID
static private final String secret = "Alibaba Cloud アカウントの AccessKey シークレット"; // Alibaba Cloud アカウントの AccessKey シークレット
static private final String host = "検索候補モデルを呼び出したいアプリケーションのリージョンにある OpenSearch API のエンドポイント"; // 検索候補モデルを呼び出したいアプリケーションのリージョンにある OpenSearch API のエンドポイント
OpenSearch openSearch;
OpenSearchClient openSearchClient;
static private final byte hits = 8; // 検索候補の推奨検索クエリの最大数。
static private final String suggestionName = "検索候補モデルの名前"; // 検索候補モデルの名前。
@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 = new SuggestionClient("アプリケーション名", suggestionName, openSearchClient);
String query = "検索クエリ";
try {
SuggestParams suggestParams = new SuggestParams();
suggestParams.setQuery(query); // 検索クエリ。
suggestParams.setHits(10); // 検索候補の推奨検索クエリの最大数。
suggestParams.setUserId("12345678"); // ユーザー ID。
// デフォルトでは、OpenSearch は検索クエリの用語を中国語の同音異義語に置き換えることによってもドキュメントを取得します。リクエストで re_search パラメーターを設定することで、この機能を設定できます。
// このパラメーターを ReSearch.findByValue(1) に設定すると、この機能は無効になります。このパラメーターを ReSearch.findByValue(0) に設定するか、このパラメーターを指定しないと、この機能は無効になります。
suggestParams.setReSearch(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": "skirt fashion"
},
{
"suggestion": "skirt shorty dress"
},
{
"suggestion": "skirt dotted dress"
},
{
"suggestion": "skirt young"
},
{
"suggestion": "skirt dotted"
},
{
"suggestion": "skirt shorty"
},
{
"suggestion": "skirt shorty dotted"
}
]
}注: 取得データとともに返されるリクエスト ID は、検索リクエストの関連付けに使用できます。
検索候補リクエストを検索リクエストに関連付ける
検索候補リクエストと検索リクエストの関連付けには、次の利点があります。
検索候補機能が検索結果をどの程度最適化するかを評価するためのメトリックデータを取得できます。たとえば、検索候補に基づいて取得された検索結果のページビュー (PV) やクリック率、結果がほとんどまたはまったくない検索エンジン結果ページ (SERP) の比率などのメトリックデータを取得できます。詳細については、「検索候補レポート」をご参照ください。
検索候補リクエストを検索リクエストに関連付けると、クリックデータなどのメトリックデータを取得できます。このようなデータに基づいて関連する検索候補モデルを最適化し、検索パフォーマンスを向上させることができます。
関連付け方法:
OpenSearch アプリケーションの検索リクエストが検索候補に基づいている場合、リクエストに
from_request_id={from_request_id}を含める必要があります。 from_request_id 変数は、現在の検索クエリのソースを指定します。検索クエリが検索候補、トップ検索、またはヒント機能によって推奨されている場合は、from_request_id パラメーターを機能リクエストの ID に設定します。機能リクエストを現在の検索リクエストに関連付けると、機能のメトリックを取得して、検索パフォーマンスを評価および向上させることができます。 from_request_id パラメーターの詳細については、「検索リクエストを開始する」をご参照ください。
例:
検索候補操作によって返されるリクエスト ID は 159851481919726888064081 です。次のコードは、リクエスト ID を検索リクエストに関連付ける方法の例を示しています。
SearchParams searchParams = new SearchParams(config);
searchParams.setQuery("title:'skirt shorty'"); // 検索クエリは検索候補機能によって推奨されています。
// from_request_id パラメーターを追加します。
Map<String, String> customParam =new HashMap<>();
customParam.put("from_request_id","159851481919726888064081");
searchParams.setCustomParam(customParam);
// クエリを実行し、結果を SearchResult オブジェクトの形式で返します。
SearchResult execute = searcherClient.execute(searchParams);
// SearchResult オブジェクトを文字列に変換して返します。
String result = execute.getResult();
System.out.println(result);