1
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

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

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 '君繋ぎファイブM'))"^
    --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": [
                        "君繋ぎファイブM"
                    ],
                    "artist_name_li": [
                        "アーティスト001"
                    ]
                },
                "id": "6"
            }
        ],
        "start": 0
    }
}

上記の指定により、
「artist_name_li」に"アーティス"で前方一致する文字がある、かつ、
「album_title_li」に"君繋ぎファイブM"で完全一致する文字がある
ドキュメントが検索されます。

パラメタ 説明
--search-query "フィード名=キーワード"とブール演算子で指定します。
prefix キーワードを前方一致で検索します。
term キーワードを完全一致で検索します。

 ※参考URL:公式:Amazon CloudSearch での複合クエリの作成

6.最後に

入門編は、最終回となります。
機会があれば、応用編として、より複雑な検索方法に関して、記載したいと思います。
ありがとうございました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?