使用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)[]
],
],
]);
}
}