Google Cloud の検索サービス「Retail Search」をサンプルデータでクイックに試す
前置き
前に初投稿したときからなんと約2年以上も経過してしまっていました。Publication への投稿という形で Google Cloud に関する記事を書いていこうと思います!
Retail Search とは
Retail Search は Google Cloud が提供する、EC サイトやモバイルアプリなどから利用できるフルマネージドの検索サービスです。商品カタログとユーザーイベントを取り込むことで、ユーザーにあわせた検索体験を提供できます。
Retail Search は今年 (2022年) の4月に一般提供 (GA) を開始しました。日本語ももちろんサポートしています!
Retail Search の良いところ
Google 品質の検索機能
検索サービスにおいて、検索キーワード (クエリ) からユーザーが本当に検索したい内容を理解することは重要です。Retail Search では AI における Google の専門知識を活用し、高度なクエリ理解を通した検索結果を提供します。ユーザーが本当に欲しい商品を見つけてもらいやすくなり、検索によるコンバージョン率の向上を見込むことができます。
またセマンティック検索という機能も持っており、商品の属性情報と Web サイトコンテンツを照らし合わせた検索も可能です。商品情報のタグや個別のマッピング情報を管理する手間を省くことができます。
フルマネージド
Retail Search はフルマネージドで提供しているサービスです。Retail Search を使う上でインスタンスを用意する必要はなく、商品カタログデータを API 経由でインポートするだけですぐに検索 API が実行できるようになります。
運用・監視についても、インスタンスの稼働状況のチェックなども不要です。運用時の手間も最小限に抑えることができます。
データソースを新たに用意する必要がない
検索用の API を使うまでに必要なデータは商品カタログデータのみですが、こちらは Google Merchant Center と同期することができます。
Google Merchant Center は端的に言うと Google 検索のショッピングタブにコンテンツを掲載するために登録する場所です。Google 検索経由での EC サイトへの流入を促すためにすでに登録・運用している場合は多いと思いますので、その場合には新しく商品カタログデータの用意や連携する仕組みを構築する手間が省けます。
サンプルデータで試す
Retail Search をクイックに試すために、GitHub でサンプルを提供しています。こちらを使って Retail Search の基礎的な機能を試してみましょう。
Google Cloud プロジェクトの準備
Retail Search を使いはじめるには、Google Cloud プロジェクトを用意する必要があります。プロジェクトの作成は次のドキュメントを参考にしながら作成します。Google Cloud を組織で利用している場合は権限が必要な場合もありますので、ご自身の環境に合わせて作成してください。
また Retail Search は費用が発生しますので Google Cloud プロジェクトに対して課金を有効化しておく必要があります。
サンプルプログラム
Retail Search では、一通りの機能を簡単に試せるようなサンプルコードを GitHub で公開しています。
Python
Java
Node.js
.NET
公式リファレンスのガイドからも、下記のサンプルコードを使用したインタラクティブなチュートリアルを機能ごとに試すことができます。[ガイド] をクリックすることで Cloud Shell が立ち上がり、ドキュメントを見ながら操作を試すことができます。特定の機能をすぐ試したい方はこちらも活用すると良いでしょう。
本記事では Node.js のサンプルを使ってクイックに試したいと思います。
Retail API の有効化
まずはじめに Retail API を Google Cloud プロジェクトで使えるように有効化する必要があります。Cloud Console を開きます。
Retail API の有効化、データ使用条件への同意、そして Retail Search の有効化をすべておこなっておきます。
これで Retail Search の機能が試せる状態になりました!
Cloud Shell を開く
次に Cloud Shell を開きましょう。ナビゲーションバーの右上にある Cloud Shell のアイコンをクリックし、Cloud Shell を立ち上げます。
コマンドラインで API が実行できるようになりました。残りのステップはこちらから実行していきます。
サンプルプログラムのクローン
GitHub リポジトリからサンプルプログラムをクローンしてきます。
$ git clone https://github.com/googleapis/nodejs-retail.git
$ cd nodejs-retail/samples
以降は samples
ディレクトリの中で作業を行なっていきます。
まずライブラリをダウンロードするため npm install
を実行します。
$ npm install
サービスアカウントの作成
Retail Search の SDK はサービスアカウント経由で実行できるようになっているため、ユーザーアカウントではなくサービスアカウントを用意する必要があります。
立ち上げた Cloud Shell から gcloud
コマンドを使ってサービスアカウントを作っていきます。
まず次のコマンドで gcloud
に Google Cloud プロジェクトを設定します。PROJECT-ID
は自分のプロジェクト ID に置き換えてください。
$ gcloud config set project <PROJECT-ID>
次のコマンドでサービスアカウントを作成します。ここでは、サービスアカウントの名前を retail-tutorial
にしています。
gcloud iam service-accounts create retail-tutorial
作成したサービスアカウントにロールを付与します。
$ for role in {retail.admin,editor}
do gcloud projects \
add-iam-policy-binding \
<PROJECT-ID> \
--member="serviceAccount:retail-tutorial@<PROJECT-ID>.iam.gserviceaccount.com" \
--role="roles/${role}"
done
サービスアカウントの認証キー (JSON ファイル) を作成し、ダウンロードします。
$ gcloud iam service-accounts keys \
create ~/key.json \
--iam-account \
retail-tutorial@<PROJECT-ID>.iam.gserviceaccount.com
最後にダウンロードしたキーファイルのパスを環境変数に設定します。
$ export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
以上でサービスアカウントの作成と認証の準備は完了です。
商品カタログデータをインポートする
次に Retail Search に商品カタログをインポートします。
商品カタログをインポートするためのデータソースは、Cloud Storage や BigQuery、インライン、Merchant Center 連携などさまざまな選択肢があります。サンプルコードでは Cloud Storage 経由でのインポートを試すことができます。
まず Cloud Storage バケットを下記コマンドで作成します。
$ node interactive-tutorials/setup/create-gcs-bucket.js
バケットの作成に成功するとバケット名が表示されるので、環境変数 BUCKET_NAME
にセットします。この環境変数は、この後に実行するファイルアップロードや商品インポートの呼び出し時に使用されます。
$ export BUCKET_NAME=<Your Bucket Name>
次のコマンドで Cloud Storage バケットに商品カタログデータの元ファイル (行区切りの JSON ファイル)をアップロードします。
$ node interactive-tutorials/product/import-products-gcs.js
インポートする商品カタログデータの内容は下記から参照できます(Google ロゴのアパレルグッズなどが購入できる Google Merchandise Store というサイトがあるんですが、こちらで取り扱っている商品のデータになっています)。
商品を検索する
インポートしてから程なく、検索が実行できるようになります。下記のコマンドでシンプルなクエリで検索を試すことができます。
$ node interactive-tutorials/search/search-simple-query.js
クエリの内容としては Hoodie
というキーワードで検索をかけているだけになっています。以下はソースコードを一部抜粋しています。
// Raw search query.
const query = 'Hoodie'; //TRY DIFFERENT QUERY PHRASES
// A unique identifier for tracking visitors.
const visitorId = '12345';
// Maximum number of Products to return.
const pageSize = 10;
// --- 割愛 ---
const callSearch = async () => {
console.log('Search start');
// Construct request
const request = {
placement,
query,
visitorId,
pageSize,
};
console.log('Search request: ', request);
// Run request
const response = await retailClient.search(request, {
autoPaginate: false,
});
// --- 割愛 ---
}
検索結果は次のようになります。検索にヒットした商品カタログデータは results
の中にリストで返却されます(下記ではサンプルとして1件だけに割愛しています)。
{
"results": [
{
"personalLabels": [],
"matchingVariantFields": {},
"variantRollupValues": {},
"id": "GGOEGAYB116714",
"product": {
"collectionMemberIds": [],
"categories": [
"Apparel"
],
"brands": [
"Google"
],
"tags": [],
"fulfillmentInfo": [],
"images": [
{
"uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1167.jpg",
"height": 300,
"width": 400
}
],
"sizes": [],
"materials": [],
"patterns": [],
"conditions": [],
"variants": [],
"promotions": [],
"localInventories": [],
"attributes": {
"style": {
"text": [
"Casual",
"Sport",
"Functional"
],
"numbers": []
},
"material": {
"text": [
"Cotton"
],
"numbers": []
},
"collection": {
"text": [],
"numbers": [
2021
]
}
}
}
}, ...
],
"facets": [],
"appliedControls": [],
"invalidConditionBoostSpecs": [],
"totalSize": 41,
"correctedQuery": "",
"attributionToken": "xxxxx",
"nextPageToken": "xxxxx",
"queryExpansionInfo": null,
"redirectUri": ""
}
コンソールから GUI で試す
API (SDK) 経由では試せましたが、もう少しぱっと見で確認してみたい…そんな場合はコンソールから確認が可能です。
小売 (Retail) のコンソールを開き、左メニューから「評価」を選びます。
「おすすめ情報」と「検索」のタブがあるので「検索」タブを開きます。「検索クエリ」にクエリしたいキーワードを入力すると、検索結果が表示されます。検索の仕組みがどのくらいパワフルなのかは追々触れていくとして、例えば「Google」が含まれる商品を「グーグル」や「ぐーぐる」で検索ができたり、ちょっとした誤字、例えば「Gooogle」「Gogle」などでもヒットさせることができます。
まとめ
Google Cloud の (私個人としての) イチオシサービス、Retail Search の使い始めをクイックにご紹介しました。商品カタログデータをインポートするだけで 小売に特化した検索サービスが、フルマネージドで使える ところがポイントです。クイックに試すだけでも、そのメリットは実感いただけるのではないかと思います。
他にもご紹介したい機能や TIPS が山ほどあります!こちらについては別な記事でご紹介していきたいと思います。
Discussion