Elasticquent(ElasticSearch)Laravel限制

时间:2016-08-19 14:14:24

标签: php laravel elasticsearch laravel-5.2

您好我正在尝试使用elasticSearch查询获取所有结果,但如果$ limit value为null,则只返回10个结果。

$videos = Video::searchByQuery([
                'match' => [
                    $field => $request->$field
                ],
        ],null,null,null);

那么如何获得所有结果?

2 个答案:

答案 0 :(得分:1)

那是因为default size for requests is 10并且未向任何框架传递长度限制可能会将其设置为默认值。您可以使用from和size大值:

  

虽然from和size可以设置为请求参数,但也可以在搜索主体中设置它们。从默认值为0,大小默认为10.

但是,正如question very similar to yours所指出的那样,仅使用fromsize以及ES documentation has some suggestions on search types无法进行无限大小的搜索如果您确实需要处理非常大的结果集,那么使用scroll

可能会更好
  

滚动API可用于从单个搜索请求中检索大量结果(甚至所有结果),其方式与在传统数据库上使用游标的方式非常相似。

     

滚动不适用于实时用户请求,而是用于处理大量数据

请注意最后一句话,如果这是一个实时请求,您可能需要仔细阅读第三个链接,以确定最佳的行动方案。

此外,如果您在问题中描述您的用例,那么对于用户返回的结果可能会有所帮助,我无法想象他们想要查看所有您的结果一次性,并将满足于分页方法。

一旦您完成了该研究并了解了基础知识,我建议您查看您正在使用的库的文档,以确定如何继续。

P.S。下次您询问有关ES的问题时,还会包含您正在使用的版本,因为这会影响某些答案,具体取决于您所询问的内容。

答案 1 :(得分:0)

试试这个

$params = [
    "search_type" => "scan",
    "scroll" => "30s",
    "size" => 50,
    'match' => [
                $field => $request->$field
            ],
    ];


  $videos = Video::searchByQuery($params);