LoginSignup
4
8

More than 5 years have passed since last update.

AWS SDK for PHP v3でAmazon CloudSearchを使う

Posted at

検索すると v2 の記事ばかり出てきたので、v3 のを備忘録がてら書いてみました。
PHP のコードだけです。PHP は 5.6.x で書いてます。
CloudSearch の準備は他の記事を参考にしてください。
参考:Amazon CloudSearch: 簡単な地理空間検索をやってみる - Qiita

準備

まずは AWS SDK を Composer とかでインストールして、
ドメインクライアントを呼びます。

use Aws\CloudSearchDomain\CloudSearchDomainClient;

データのアップロード

upload
$domainClient = CloudSearchDomainClient::factory([
    'endpoint' => 'http://document-xxxx.resion.cloudsearch.amazonaws.com', // Document Endpoint
    'version' => '2013-01-01',
    // credentials はコードに書かずに、環境変数等で設定するのがいいです
    // 'credentials' => [
    //     'key' => '****',
    //     'secret' => '****',
    // ],
]);

$domainClient->uploadDocuments([
    'contentType' => 'application/json',
    'documents' => json_encode([[
        'type' => 'add',
        'id' => 1,
        'fields' => [
            'age'     => 30,                     // int
            'name'    => '山田太郎',              // text
            'check'   => [ 1, 2, 3, 4 ],         // int-array
            'created' => '2017-05-01T00:00:00Z', // date
        ],
    ]]),
]);

新規追加も更新もこれでできます。

フィールドの型が合っていないとエラーが出ます。
date 型の場合、RFC3339 形式で UTC で指定しないといけないので、私は下記のようにしました。

gmdate('Y-m-d\TH:i:s\Z', time())

PHPの DateTime クラスDATE_RFC3339 とかでいけるかと思ったんですが、末尾 Z ではなく +00:00 になるのはエラーが出てしまいました。

チェックボックスで入力するような値は、DB ならビットで 1 カラムに入れたりしますが、検索でビット演算子が使えなそうだし、 int-array があるのでそれにしました。

検索

search
$domainClient = CloudSearchDomainClient::factory([
    'endpoint' => 'http://search-xxxx.resion.cloudsearch.amazonaws.com', // Search Endpoint
    'version' => '2013-01-01',
]);

$result = $domainClient->search([
    'query' => "name: 'やまだ' created: [2017-04-30T15:00:00Z TO *]",
    'queryParser' => 'lucene',
]);

var_dump($result);

queryParser は Lucene にしましたが、お好みでいいと思います。

Lucene だと '*:*' とすると全件出せるので、他のは出し方わからなかったので、これにしました。
syntax もググるとすぐ出てきますし(Lucene Query Syntax)。

4
8
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
4
8