1.概要
システムのAWS化に合わせて、提供している検索エンジンをCloudSearchに置き換える事になりました。検証するために、CLI(コマンドラインインターフェイス)経由でCloudSearchを操作したので、その手順をまとめて残したいと思います。
2.前回までの記事
【連載】Amazon CloudSearchのCLI入門編 #1 (検索ドメインの作成)
【連載】Amazon CloudSearchのCLI入門編 #2 (ドキュメントの登録)
3.前提条件(再掲)
クライアントは、Windows環境です。CLIのコマンドは同じなので、他のコマンドは、環境に合わせて、適宜読みかえて下さい。あと、アクセスキーとシークレットキーを発行してCloudSearchへ接続します。
今回、準備する検索ドメインは、以下の通りとなります。
フィールド名 | 型 |
---|---|
id | literal |
artist_name_li | literal |
album_title_li | literal |
artist_name_te | text |
album_title_te | text |
※ 検証内容がliteral型とtext型のscore値の確認だったため、
それぞれの検索フィードを定義しました。
※ その他、使える型は、以下のURLを参考にして下さい。
参考URL:公式:Amazon CloudSearch ドメインのインデックスフィールドの設定
4.使用するクエリパーサー
CloudSearchでは、4つのクエリパーサーをサポートしています。
今回は、「structured」を使用した検索クエリーを利用します。
クエリパーサー | 概要 |
---|---|
simple | 指定された文字列をすべての text および text-array フィールドで検索します。 |
structured | 特定のフィールドの検索、ブール演算子を使用した複合クエリの作成、および用語の増強や近接検索などの高度な機能を使用することができます。 |
lucene | Apache Lucene クエリパーサーの構文を使用して、検索条件を指定します。 |
dismax | DisMax のクエリパーサーで定義された Apache Lucene のクエリパーサー構文の簡略化されたサブセットを使用して、検索条件を指定します。 |
参考URL:公式;Amazon CloudSearch でのデータの検索
5.ドキュメントの検索
以下のコマンドを実行して、ドキュメントを検索します。
1.text型フィールドの指定
aws cloudsearchdomain search --endpoint-url https://search-search-score-test-yamamoto-aaaaaaaaaaaaaaaaaaaaaaaaaa.ap-northeast-1.cloudsearch.amazonaws.com^ --query-parser structured^ --search-query "artist_name_te:'アーティスト'"^ --return "id,artist_name_te,_score"^ --start 0^ --size 10^ --sort "_score desc, id desc" { "status": { "timems": 1, "rid": "2YSSv7Qrz5EECn6ufA==" }, "hits": { "found": 2, "hit": [ { "fields": { "_score": [ "2.541985" ], "artist_name_te": [ "アーティスト001" ] }, "id": "6" }, { "fields": { "_score": [ "2.541985" ], "artist_name_te": [ "アーティスト001" ] }, "id": "7" } ], "start": 0 } } |
上記の指定により、
「artist_name_te」に”アーティスト”を保持するドキュメントが検索されます。
パラメタ | 説明 |
---|---|
–query-parser | 使用するクエリーパーサーを指定します。 |
–search-query | 検索するクエリーを指定します。”フィールド名:キーワード”で指定します。 |
–return | 返却するフィードを指定します。 |
-start | データの取得開始位置を指定します。 |
–size | データの取得件数を指定します。 |
2.literal型フィールドへの指定
aws cloudsearchdomain search --endpoint-url https://search-search-score-test-yamamoto-aaaaaaaaaaaaaaaaaaaaaaaaaa.ap-northeast-1.cloudsearch.amazonaws.com^ --query-parser structured^ --search-query "(and(prefix field=artist_name_li 'アーティスト')(term field=album_title_li 'タイトル'))"^ --return "id,artist_name_li,album_title_li,_score"^ --start 0^ --size 10^ --sort "_score desc, id desc" { "status": { "timems": 2, "rid": "56P8vrQryJEECn6ufA==" }, "hits": { "found": 1, "hit": [ { "fields": { "_score": [ "2.6739764" ], "album_title_li": [ "タイトル" ], "artist_name_li": [ "アーティスト001" ] }, "id": "6" } ], "start": 0 } } |
上記の指定により、
「artist_name_li」に”アーティス”で前方一致する文字がある、かつ、
「album_title_li」に”タイトル”で完全一致する文字がある
ドキュメントが検索されます。
パラメタ | 説明 |
---|---|
–search-query | “フィード名=キーワード”とブール演算子で指定します。 |
prefix | キーワードを前方一致で検索します。 |
term | キーワードを完全一致で検索します。 |
※参考URL:公式:Amazon CloudSearch での複合クエリの作成
6.最後に
入門編は、最終回となります。機会があれば応用編として、より複雑な検索方法に関して記載したいと思います。
この記事を書いた人
- レコチョクの楽曲情報の検索や、決済/会員情報、 レコメンド情報などを扱う、レコチョクAPIの運用と改善を担当しています。主にプロジェクト管理をやっています。技術力は低めですが、気づきがあったことなどを更新していきます。
最近書いた記事
- 2023.12.09エンジニア組織紹介 - バックエンドアーキテクトG -
- 2023.11.07キャリアの学びを得たオンライン記事の紹介(出会いと経験で自分を変える「キャリアの螺旋」の歩み方)
- 2023.10.20Amazon EBSにおけるボリュームサイズの拡張
- 2017.07.28ローカルからS3にシンボリックリンクを除いてアップロードする方法