複数属性検索、カテゴリフィルタリング、クエリ分析、関連度ランキングをサポートする商品カタログ向けのキーワード検索システムを構築します。このチュートリアルを完了すると、キーワードクエリを受け付け、カテゴリと価格で結果をフィルタリングし、スペルミスのあるクエリを修正し、関連度によって結果をランク付けする、実際に動作する検索プロトタイプが完成します。

前提条件
開始する前に、以下を確認してください。
AccessKey ペアを持つ Alibaba Cloud アカウント。Open Search アプリケーションは、認証のために AccessKey ペアを必要とします。
(オプション) アクセスを委任する場合は、RAM ユーザー用の AccessKey ペア。詳細については、「アクセス承認ルール」をご参照ください。
(オプション) データソースとしてデータベースを使用する場合は、商品データを含む ApsaraDB RDS for MySQL インスタンス
ステップ 1:アプリケーションの作成
E コマース検索には、商品テーブルや価格テーブルなど、複数の関連テーブルが含まれます。複数テーブルの結合をサポートする 高度なアプリケーション を選択します。
Open Search コンソールにログインします。左側のナビゲーションペインで、[インスタンス管理] をクリックします。[インスタンス管理] ページで、[インスタンスの作成] をクリックします。ページの左上隅で、エディションを [OpenSearch 業界アルゴリズム版] に設定し、次に上部のナビゲーションバーでターゲットリージョンを選択します。
アプリケーションタイプを選択します。複数テーブルの結合をサポートする高度なアプリケーションを選択します。アプリケーションタイプの比較については、「標準アプリケーションと高度なアプリケーションの比較」をご参照ください。
アプリケーションパラメータを設定します。
このチュートリアルでは、以下のパラメータ値を使用します。
[プロダクトエディション]:[Industry Algorithm Edition]
[プロダクトタイプ]:[従量課金]
[リージョンとゾーン]:[中国 (杭州)]
[業界タイプ]:[E コマース業界]
[クラスター設定]:[専用クラスター - 汎用]
パラメータ 説明 [プロダクトタイプ] [subscription][pay-as-you-go]課金方法: または 。詳細については、「課金方法」をご参照ください。 [リージョンとゾーン] 中国:深セン、青島、北京、張家口、杭州、上海、香港。アジア太平洋:シンガポール。ヨーロッパ&アメリカ:ドイツ (フランクフルト)、米国 (バージニア)。 [アプリケーション名] 数字、英字、アンダースコア (_) を使用できます。先頭は英字にする必要があります。最大 30 文字です。作成後は変更できません。 [アプリケーションタイプ] 高度なアプリケーションまたは標準アプリケーション。 [クラスター設定] 仕様タイプ:共有汎用、共有コンピューティング、共有ストレージ、専用汎用、専用コンピューティング、専用ストレージ。詳細については、「What is Open Search?」をご参照ください。 [ストレージ容量とコンピューティングリソース] ワークロードに基づいてクォータを設定します。論理コンピューティングユニット (LCU) の数は、秒間クエリ数 (QPS) にクエリごとに消費される LCU を乗じた値です。クエリごとの LCU 消費量を確認するには、共有汎用インスタンスを購入して検索テストを実行してください。
ステップ 2:アプリケーションスキーマの定義
Open Search は、アプリケーションスキーマを定義する 4 つの方法を提供しています。
| 方法 | 最適な用途 |
|---|---|
| [アプリケーションスキーマを手動で定義する] | すべてのフィールドと型を完全に制御する場合 |
| [テンプレートを使用してアプリケーションスキーマを定義する] | 事前定義されたテンプレートまたはカスタムテンプレートを使用した迅速なセットアップ |
| [ファイルをアップロードしてアプリケーションスキーマを定義する] | 既存の JSON データファイルからブートストラップします。Open Search がファイルを解析して初期スキーマを生成します。生成後にフィールドの型を再定義してください。 |
| [データソースを使用してアプリケーションスキーマを定義する] | ApsaraDB RDS、MaxCompute、または PolarDB からデータを同期する場合。ソーステーブルのスキーマから初期アプリケーションスキーマが生成され、手作業とエラーが削減されます。 |
MaxCompute、ApsaraDB RDS、PolarDB などの Alibaba Cloud ストレージサービスを使用する場合は、Open Search コンソールでそれらをデータソースとして指定し、自動データ同期を行います。以下の手順では、ApsaraDB RDS データソースを例として使用します。詳細については、「ApsaraDB RDS for MySQLデータソースの設定」をご参照ください。
データソースへの接続
データベース接続の詳細を入力します。
[データベースに接続] ダイアログボックスで、[RDSインスタンスID]、[データベース名]、[ユーザー名]、[パスワード] を入力し、[接続] をクリックします。
データソースの選択
インポートするテーブルを選択します。
[データソースの選択] ダイアログボックスで、[RDS] タブをクリックします。 [データベースの選択] を opensearch に設定します (接続インスタンスは rm-bp1pgu04tn0ia280e です)。 [テーブルの選択] セクションで、product_1 と price_detail_1 を選択済みリストに追加し、[OK] をクリックします。
テーブルスキーマの設定
この例では、2 つのテーブルを使用します。
プライマリテーブル:商品テーブル (商品カタログ)
セカンダリテーブル:商品価格テーブル
商品価格テーブルの主キー ID は、商品テーブルの外部キー ID に関連付けられています。
アプリケーションスキーマを定義すると、プライマリーテーブル product_1 には以下の 15 個のフィールドが含まれています。
category_name(カテゴリ名, TEXT)image_url(リテラル配列)description(製品の説明, テキスト)brand_name(ブランド名、テキスト)thumbnail_url(リテラル配列)title(製品タイトル, TEXT)is_onsale(整数)url(リテラル)brand_id(リテラル)series_id(リテラル)sold_num(販売数、INT)category_id(整数)onsale_time(販売開始時間、INT)price(DOUBLE)series_name(テキスト)
各フィールドに対して、主キー、フィールドタグ、フィールドの型、およびセカンダリテーブルへの結合を設定できます。
セカンダリテーブル price_detail_1 (データソース opensearch:price_detail_1) は、以下の 4 つのフィールドを定義します。
discount_price、DOUBLE 型pid、INT 型、主キーとして設定sale_price、型 DOUBLEact_price、DOUBLE 型
インデックススキーマの定義
商品テーブルと商品価格テーブルのすべての検索可能なフィールドを、「default」という名前のインデックスリストに追加します。これにより、query=default:"keyword" のようなクエリが可能になります。
業界を [E コマース] に、テンプレートを [一般] に設定します。インデックスフィールドリストには、以下のインデックス設定が含まれます。
default(デフォルトインデックス):category_name、description、brand_name、title、create_by、およびupdate_byのフィールドが含まれます。 アナライザー:インダストリー - E コマース汎用アナライザーcategory_name(カテゴリ名インデックス): アナライザー: 業界 - E コマース汎用アナライザーcategory_id:アナライザー:キーワードseries_name: アナライザー: 中国語 - 汎用アナライザーbrand_name: アナライザー: 中国語汎用アナライザーid:アナライザー:キーワードtitle(タイトルインデックス): アナライザー: 業界 - E コマース汎用アナライザーseller_id: アナライザー:キーワードbrand_id: アナライザー: キーワードseries_id:アナライザー:キーワード
アナライザーは検索結果に影響します。分析方法は慎重に選択してください。詳細については、「組み込みアナライザー」をご参照ください。
データ同期の有効化
データソースの更新が自動的に Open Search にプッシュされるように、自動データ同期を設定します。
データソース設定ページでは、product_1 テーブルと price_detail_1 テーブルはどちらも同じ ApsaraDB RDS インスタンスに関連付けられており、[自動データ同期] スイッチがオンになっています。
アプリケーションの完成
[完了] をクリックします。[アプリケーション詳細] ページに、アプリケーションステータスが初期化中と表示されます。
ステップ 3:データのアップロード
ApsaraDB RDS データソースを使用すると、インデックス作成中に全量データインポートが自動的に開始されます。インポートの進捗は[アプリケーション詳細] ページで確認してください。
または、Open Search API または SDK を使用してデータをアップロードします。詳細については、「API概要」および「SDK概要」をご参照ください。
ステップ 4:検索クエリのテスト
データのアップロードが完了したら、検索テストを実行します。Open Search コンソールには、組み込みの検索テストページが用意されています。プログラムからアクセスする場合は、Open Search API または SDK を使用してください。
検索構文の詳細については、「検索リクエストの開始」および「query 句」をご参照ください。
検索テストページで、test_han_indexes アプリケーションとオフラインのアプリケーション環境を選択し、query=title:'裙子' を入力して、config 句を start:0 に設定します。
ステップ 5:クエリ分析の設定
クエリ分析は、検索品質を向上させるために、検索実行前にクエリを処理します。ロングテールクエリは結果が少なく、スペルミスや中国語のピンインを含むクエリは結果が返らない場合があります。クエリ分析はこれらの問題に対処します。詳細については、「クエリ分析」および「関連度に基づく検索の実行」をご参照ください。
Open Search は、以下のクエリ分析機能を提供しています。
| 機能 | 説明 | 例 |
|---|---|---|
| [ストップワード] | 句読点や語気助詞など、意味のない単語をフィルタリングします。 | クエリ「Running Man!」-- 感嘆符がフィルタリングされます。 |
| [スペル修正] | 明確なスペルミスを自動的に修正します。不確実な場合は、元のクエリが使用されます。 | 「Alipapa」は「Alibaba」に修正されます。 |
| [単語の重み付け] | 用語の重要度を評価して重みを割り当てます。重要度の低い用語は検索から除外される場合があります。 | クエリ「Open Search is good or not」-- 「Open Search」を含むドキュメントを検索します。 |
| [シノニム] | 組み込みのシノニムライブラリとセマンティックモデルのシノニムを使用してクエリを拡張します。単語の重み付けと組み合わせることで、より良い結果が得られます。 | 「KFC」で「Kentucky Fried Chicken」も検索されます。 |
| [固有表現抽出 (NER)] | クエリ内のセマンティックエンティティを識別し、カテゴリの優先度を割り当てます。 | 「Nike Slim Dress」-- 「Nike」(ブランド、中優先度)、「Slim」(スタイル、低優先度)、「Dress」(カテゴリ、高優先度)。 |
例:スペル修正の設定
以下の手順は、スペル修正ルールの設定方法を示しています。
介入辞書の作成
Open Search コンソールで、[検索アルゴリズムセンター] > [検索設定] に移動します。[辞書管理] をクリックします。
[作成] をクリックします。[クエリ分析辞書の作成] パネルで、辞書名を入力し、[辞書タイプ] を [スペル修正] に設定して、[保存] をクリックします。この例では、[名前] を
dic_errorに設定します。辞書一覧で目的の辞書を探し、[エントリの管理] をクリックします。エントリ管理ページには、辞書の名前、辞書タイプ、作成時間、エントリ数などの辞書の詳細が表示されます。エントリを追加するには、[介入エントリの追加] または [エントリの一括追加] をクリックします。
[介入エントリの追加] をクリックしてエントリを作成します。
[介入エントリの追加] ダイアログボックスで、以下の情報を指定します。
クエリ: 修正する検索語。例:
连衣群訂正後の単語: たとえば
连衣裙のような正しい用語[介入タイプ]:[追加] または [ブロック] を選択します
[保存] をクリックします。エントリが介入エントリリストに表示されます。リストには、クエリ、修正後の単語、介入タイプ、変更日時、ステータス、操作の列と、エントリをフィルタリングするための[クエリを入力]検索ボックスが表示されます。この例では、不正なクエリ
连衣群が连衣裙に修正され、介入タイプは「追加」、ステータスは「有効」です。
クエリ分析ルールの作成
[検索アルゴリズムセンター] > [検索設定] に移動し、[クエリ分析ルール設定] をクリックします。
[作成] をクリックします。[ルールを作成] パネルで、[介入辞書] を、作成したスペル訂正辞書 (たとえば、
dic_error) に設定します。同じパネルで、ルール名としてtest_errorを入力します。名前には、数字、文字、およびアンダースコア (_) を使用でき、先頭は小文字にする必要があり、16 文字を超えることはできません。オンラインアプリケーション環境でターゲットアプリケーションをtest_han_indexesに設定し、インデックス範囲を[タイトル]に、業種を[E コマース]に設定し、機能セクションで[スペル訂正]を選択します。辞書ソースとして[システム組み込み辞書]を選択し、次に[OK]をクリックしてルールを作成します。
ルールのテストと適用
[クエリ分析ルール設定] ページで、[操作] 列の [検索テスト] をクリックして、修正動作を検証します。 ルールリストには、クエリ分析名
test_error、タイプ カスタム、対象インデックスtitle、業種 E コマース、および含まれる機能 スペル訂正 が表示されます。検証後、[インデックスの向き] をクリックし、ルールをデフォルトのクエリ分析ルールとして設定します。
検索テストページでインデックスを選択し、パラメーター
qp=test_errorを設定し、意図的なスペルミスを含むクエリtitle:'连衣群'を入力して、[検索] をクリックします。コンソールには、连衣裙の結果が返されたことを示すプロンプトと、代わりに连衣群を検索するオプションが表示され、クエリは自動的に(title:"连衣裙")に修正され、连衣裙に一致する製品が返されます。ルールをデフォルトとして設定すると、ルールリストのクエリ分析名が
[Default]test_errorに変わります。このルールはまだ公開されていないため赤字で表示され、「デフォルト」列には「はい」と表示されます。元に戻すには、「操作」列の [デフォルトルールのキャンセル] をクリックします。
ステップ 6:ソート式の設定
ソート式は、検索結果のランク付け方法を制御します。query 句でソート式を指定して、結果をソートできます。Open Search は 2 段階のランキングアプローチを使用します。粗次ソート (第 1 段階のランキング) で候補を絞り込み、精次ソート (第 2 段階のランキング) で最終的な順序を決定します。
詳細については、「ソート式の設定」をご参照ください。
粗次ソート式の作成
Open Search コンソールで、[検索アルゴリズムセンター] > [ソート設定] を選択して [ポリシー管理] ページを開きます。
[作成] をクリックして粗ソート式を追加します。テキストスコアや鮮度スコアなどの代表的なフィールドを選択します。粗ソートは検索パフォーマンスに大きな影響を与えるため、フィールドは慎重に選択してください。
基本情報ステップで、[対象アプリケーション] とその環境を選択し、[ポリシー名] を入力します。名前は 1~30 文字で、英字で始まり、大文字、小文字、数字、アンダースコア (_) を含めることができます。[タイプ] を [式] に設定し、[次へ] をクリックします。
並べ替え設定手順では、[Scoring Feature] を
static_bm250に、[Weight] を1に設定し、[Finish] をクリックします。
精次ソート式の作成
テキスト関連度スコアリング用の精次ソート式を追加します。
[ポリシーの作成] ウィザードの基本情報ページで、[ポリシー名] を入力し、[適用範囲] を [精次ソート] に、[タイプ] を [式] に設定し、[次へ] をクリックしてソート設定ステップに進みます。
ソート式エディタに text_relevance(title) を入力し、[完了] をクリックします。
ソート結果の比較
[検索テスト] ページで、標準クエリの結果と、ソート式を適用したクエリの結果を比較します。
test_han_indexes インデックスを選択し、アプリケーションタイプを[オンラインアプリケーション]に設定します。query=title:'裙子' を入力し、config 句を start:0 に設定します。ページには 2 つのファインソートポリシーの結果が並べて表示され、ファインソート設定の効果を確認できます。
ステップ 7:ドロップダウンサジェストとカテゴリ予測の追加
ドロップダウンサジェスト
ドロップダウンサジェストは、ユーザーが入力する際にクエリをより速く見つけるのに役立ち、E コマース検索での入力作業を削減します。設定手順については、「ドロップダウンサジェスト」をご参照ください。
カテゴリ予測
カテゴリ予測は、検索クエリが対象とする可能性が最も高い商品カテゴリを識別します。設定手順については、「カテゴリ予測」をご参照ください。
ステップ 8:結果の多様性とフィルタリングの制御
Distinct 句
単一のベンダーの複数の商品が高スコアの場合、結果ページが独占される可能性があります。distinct 句は多様性を確保し、結果に複数のベンダーの商品が含まれるようにします。詳細については、「Distinct 句」をご参照ください。
Filter 句
filter 句を使用すると、ユーザーは価格などの属性範囲で結果を絞り込むことができます。詳細については、「Filter 句」をご参照ください。
以下の Java コードは、価格範囲でフィルタリングする方法を示しています。
if(!lowPrice.equals("")){
queryElement.addFilter("price>=" + lowPrice);
}
if(!highPrice.equals("")){
queryElement.addFilter("price<=" + highPrice);
}構築した内容
これらの手順を完了すると、E コマース検索プロトタイプは以下をサポートします。
結合されたテーブル全体での複数属性キーワード検索
スペル修正、ストップワード、シノニム、固有表現抽出を使用したクエリ分析
粗次ソートおよび精次ソート式による 2 段階の関連度ランキング
ドロップダウンサジェストとカテゴリ予測
distinct句による結果の多様性とfilter句による価格フィルタリング
Open Search は検索 API と SDK を提供しているため、カスタム検索インフラストラクチャを構築・保守することなく、これらの機能をアプリケーションに統合できます。