LoginSignup
2
1

More than 3 years have passed since last update.

elasticsearch-php で全件取得

Posted at

elasticsearch-php で特定のindexから全件取得する方法です。

方法1

index だけを指定すると全件取得になるようです。
sort 設定をしたいので body に入れています。

use Elasticsearch\ClientBuilder;

class ElasticSearch
{
    public function getAll()
    {
        $client = ClientBuilder::create()
            ->setHosts([ENV('ELASTICSEARCH_HOST', 'elasticsearch') . ':' . ENV('ELASTICSEARCH_PORT', '9200')])
            ->build();

        $searchResults = $client->search([
            'index' => 'index_name',
            'body' => [
                'sort' => [
                    'created_at' => ['order' => 'desc'],
                ],
            ],
        ]);
    }
}

方法2

最初こちらの方法2しか知らなかったので方法1を使わなかったのですが、特に理由がなければ方法1で良さそうでした。
動作に微妙な違いがあるかもしれませんが、詳細は未検証です。

match_all を使うと全件取得になります。


use Elasticsearch\ClientBuilder;

class ElasticSearch
{
    public function getAll()
    {
        $client = ClientBuilder::create()
            ->setHosts([ENV('ELASTICSEARCH_HOST', 'elasticsearch') . ':' . ENV('ELASTICSEARCH_PORT', '9200')])
            ->build();

        $searchResults = $client->search([
            'index' => 'index_name',
            'from' => 0,
            // 設定可能上限値なので実質無制限扱い
            'size' => 10000,
            'body' => [
                'query' => [
                    // see: see: https://github.com/elastic/elasticsearch-php/issues/495
                    'match_all' => (object)[]
                ],
            ],
        ]);
    }
}
2
1
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
2
1