使用elasticsearch-php获取所有记录

以下是使用elasticsearch-php从特定索引中获取所有记录的方法。

在中文中进行原生语言改述:

选项一:

1. 方案一

如果只指定索引,则似乎会获取所有条目。
由于我想要设置排序条件,所以我将其放在正文中。

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'],
                ],
            ],
        ]);
    }
}

第二种方法

最初我只知道这两种方法,所以没有使用方法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)[]
                ],
            ],
        ]);
    }
}
广告
将在 10 秒后关闭
bannerAds