【问题标题】:How to use Elasticsearch fo fetch data by using Laravel如何通过 Laravel 使用 Elasticsearch 获取数据
【发布时间】:2021-03-16 08:17:41
【问题描述】:

我在我的laravel-app 中使用elasticsearch,我想从第三方 API 获取大量数据。我读过,我需要使用elasticsearch 提供的scroll API,但我真的不知道如何正确使用它。数据量约为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 - 但下一步该怎么做?

请帮忙!

【问题讨论】:

    标签: php laravel elasticsearch curl


    【解决方案1】:

    要继续滚动,您必须将此 scroll_id 传递给滚动 api,如下所示。继续在循环中请求以下内容,直到您不再获得响应。

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

    为了使滚动上下文保持活动状态(以便下一个滚动请求不会失败),我们传递了 1m(1 分钟)。将此值保持在当前批次处理完成的范围内。

    您可以使用 curl 发出上述请求。阅读更多关于滚动here

    【讨论】:

    • 嗯,我明白了。很难在任何地方找到任何好的和/或真实的例子,所以我有点卡住如何继续......我只想获取 1000 条记录,之后,接下来的 1000 条等等,但我不知道如何...... . :-s
    猜你喜欢
    • 2018-06-08
    • 2021-03-05
    • 2019-06-21
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多