LoginSignup
7
10

More than 5 years have passed since last update.

Amazon CloudSearch で 商品検索を実現する - No.1 データ投入

Last updated at Posted at 2016-11-27

やりたいこと

RDSMSのLIKE検索よりも柔軟に、検索エンジンの要領で商品検索を行うことを目標にします。

環境

  • Amazon CloudSearch APIバージョン 2013-01-01

利用するデータ

Wikpediaの任天堂発売のゲームタイトル一覧ページのリンク先をスクレイピングしてjson形式のデータを作成します。

[
    {
        "type": "add",
        "id": 1,
        "fields": {
            "page_title": "マリオブラザーズ",
            "content": "『マリオブラザーズ』は、1983年に発売された任天堂のアクションゲーム。マリオシリーズで初めてマリオの名がタイトルに冠され、マリオという名として主人公が活躍するゲームとしては、マリオシリーズ第1作目にあたる。",
            "genre": "固定画面アクションゲーム",
            "plat": "アーケード",
            "dev": "任天堂",
            "pub": "任天堂レジャーシステム",
            "producer": "横井軍平",
            "designer": "宮本茂",
            "programmer": "宮本茂",
            "composer": "兼岡行男",
            "players": "1 - 2人",
            "media": "業務用基板",
            "working_dates": "1983年7月14日1983年",
            "rating": "CERO:A(全年齢対象)",
            "device": "2方向レバー 1ボタン",
            "cpu": "メイン:Z80 (@ 3.072 MHz) サウンド:I8039 (@ 730 kHz)",
            "sound": "DAC",
            "display": "ラスタースキャン 横モニター 256 x 224ピクセル パレット256色",
            "etc": "移植されたプラットホームについては本記事#他機種版の項を参照のこと。",
            "link_title": "マリオブラザーズ"
        }
    },
~以下省略~

JSONファイルのフィールドはAmazon CloudSearch 用にデータを準備に沿って作成します。


type
実行するオペレーション: add または delete。

id
ドキュメントの一意の ID。ドキュメント ID では、任意の英字または数字と次の文字を使用できます。​_ - = # ; : / ? @ & ドキュメント ID は、1​~​128 文字以内にする必要があります。

fields
各ドキュメントフィールドの名前と値のペア。latlon フィールドの値を指定するには、カンマ区切りリストとして緯度と経度を指定します。たとえば、"location_field": "35.628611,-120.694152" のようになります。ドキュメントを JSON で指定する場合、フィールドの値を null にすることはできません(ただしフィールドを完全に省略することはできます)。

フィルド名 内容
link_title 任天堂発売のゲームタイトル一覧のリンクのテキスト
page_title リンク先のページのタイトル
content 最初の、目次の前の1段落の文章
genre テンプレートに記載されているジャンル
plat テンプレートに記載されている対応機種
dev テンプレートに記載されている開発元
pub テンプレートに記載されている発売元
distributor テンプレートに記載されている販売元
producer テンプレートに記載されているプロデューサー
director テンプレートに記載されているディレクター
designer テンプレートに記載されているデザイナー
writer テンプレートに記載されているシナリオ
programmer テンプレートに記載されているプログラマー
composer テンプレートに記載されている音楽
artist テンプレートに記載されている術
license テンプレートに記載されているライセンス
series テンプレートに記載されているシリーズ
ver テンプレートに記載されているバージョン
players テンプレートに記載されている人数
media テンプレートに記載されているメディア
publish_date テンプレートに記載されている発売日
last_release_version テンプレートに記載されている最新版
last_preview_version テンプレートに記載されている最新評価版
rating テンプレートに記載されている対象年齢
contents_icon テンプレートに記載されているコンテンツ アイコン
download_content テンプレートに記載されているダウンロード コンテンツ
device テンプレートに記載されているデバイス
spec テンプレートに記載されている必要環境
engine テンプレートに記載されているエンジン
aspect_ratio テンプレートに記載されているアスペクト比
resolution テンプレートに記載されている解像度
cabinet テンプレートに記載されている筐体
cpu テンプレートに記載されているCPU
sound テンプレートに記載されているサウンド
display テンプレートに記載されているディスプレイ
sales テンプレートに記載されている売上本数
etc テンプレートに記載されているその他

検索ドメイン作成

検索する商品を投入するために 検索ドメイン を作成します。 検索ドメインはRDSMSと対比させるとテーブルに近い概念ですが、一つのドメインには一つの定義を作成し、検索ドメインで検索対象のデータを定義します。CloudSearchはApache Solrのマネージドサービスなので、検索ドメインを Solrの言葉で表すと「スキーマ」になります。

Solrの「スキーマ」に由来するのでRDBMSでのJOINに相当することがでません。非正規化したデータを使います。

ウィザードを起動して検索ドメインの情報を入力

ウィザード起動

CloudSearchの管理コンソールから「Create a new search domain」ボタンをクリックして、ウィザードを起動します。
00-start-wizard.png

NAME YOUR DOMAIN

Search Doamin Nameに検索ドメイン名を入力します。今回は「cs-games」にしました。アップロード容量と検索性能の Desired Instance Typeと耐障害性のDesired Replication Countはデフォルト値のままにします。

01-create-domain.png

CONFIGURE INDEX

ウィザードに投入するデータをアップロードすることでフィールド設定のひな型が提供されるので、スクレイピングで作成したjson形式のファイルをアップロードします。

02-columnconfig.png

REVIEW INDEX CONFIGURATION

アップロードされJSONを元にフィールド名の定義が自動作成されます。概ね、このまま利用しますが、二つだけ変更を行います。

  • すべてのフィールドのAnalysis SchemeをJapaneseに変更します。
  • distributor、genre、plat、pubのTypeをliteralに変更し、Facetをonにしておきます。 ファセットは検索結果の絞り込みとフィルタ処理を行うために使用するカテゴリとして利用できます。

03-review-configuration.png

SETUP ACCESS POLICIES

検索ドメインのアクセスポリシーを設定します。今回はSearch and Suggester service: Allow all. Document Service: Account Owner only.を選択します。

04-access-policy.png

CONFIRM

ここまでの設定内容を確認します。修正内容があれば、左下のBackを押下して戻ります。この内容でよければ、右下のConfirmを押下します。

05.confirm.png

ウィザード終了

Wizardで一通りの手続きが完了すると、インスタンスに検索ドメインが作成されます。作成には10分程かかるのでしばらく待ちます。

06.done.png

ダッシュボードで完了を待つ

管理コンソールから作成した検索ドメインのステータスがACTIVEになるのを待ちます。

07-active.png

データ投入

DOCUMENT SOURCE

ダッシュボードのUpload Documentsを押下します。表示されるダイアログのFile(s) on my local diskを選択し、投入するデータのjsonファイルを指定します。その後にContinueを押下します。

1.choice-file.png

REVIEW DOCUMENTS

アップロードしたjsonファイルが読み込まれ、チェックが行われます。解析して得られた件数とフィールドが表示されます。もし、解析した結果にエラーがあれば、赤文字で表示されます。エラーがなければUpload Documentsを押下します。

2.review.png

DOCUMENT SUMMARY

アップロードが無事に終わると、サマリーとして追加と削除の件数が表示されます。
最後にFinishを押下して、ダイアログを閉じます。

3.sumary.png

簡単な検索

ダッシュボードのSearchable DocumentsはアップロードしたJSONファイルの内容ににエラーが無ければ、JSONファイルに登録してあった件数と同じになっています。それを確認し、新しく表示されているRun a test searchに検索ワードとして「マリオ」を入力し、Goを押下すると検索が行われます。

a.searchFromDashboard.png

b.searchResult.png

ファセットに指定したganre、plat、pubで絞込を行えるように、検索結果の右側にフィールド毎に候補が表示されています。

つつき(予定)

テキスト分析スキームのシノニムを試してみます。

シノニムを利用することで「FC」と「ファミコン」と「ファミリーコンピューター」を同じものを指す単語としてあつかえる予定です。

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10