如何使用elasticsearch通过laravel获取数据

oyt4ldly  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(600)

我在用 elasticsearch 在我的 laravel -我和app想从第三方api获取大量数据。我读过,我需要使用 scroll API 提供单位 elasticsearch 但我真的不知道如何正确使用它。数据量约为200万条记录。那我怎么去拿呢?
以下是我迄今为止所做的:

$query = '
{
    "_source":[
        "Company.*",
        "Company.Metadata.*"
    ],
    "query":{
        "bool": {
            "must": [
                {
                    "match": {
                        "Company.Metadata.status": "active"
                    }
                }
            ]
        }
    },
    "size" : 1000
  }

';

$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $query);
curl_setopt($curl, CURLOPT_URL, "http://thirdpartyapidomain.com/_search?scroll=1m");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
   'Content-Type: application/json'
));
curl_setopt($curl, CURLOPT_USERPWD, "user:mypassword");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

$result = json_decode(curl_exec($curl));

curl_close($curl);
$hits = $result->hits->hits; 

return $hits;

这给了我1000张唱片和 scroll_id -但接下来该怎么办呢?
请帮帮我!

kmbjn2e3

kmbjn2e31#

要继续滚动,必须将此滚动id传递给滚动api,如下所示。在一个循环中不断地请求下面的内容,直到你不再得到响应。

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : <scroll_id_here>
}

为了使滚动上下文保持活动状态(以便下一个滚动请求不会失败),我们通过1m(1分钟)。将此值保留为当前批处理完成的范围。
您可以使用curl发出上述请求。在这里阅读更多的滚动。

相关问题