目次

目次

【連載】Amazon CloudSearchのCLI入門編 #3 (ドキュメントの検索)

アバター画像
山本 耕琢(コウタク)
アバター画像
山本 耕琢(コウタク)
最終更新日2017/07/13 投稿日2017/07/13

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の運用と改善を担当しています。主にプロジェクト管理をやっています。技術力は低めですが、気づきがあったことなどを更新していきます。

目次