您好我正在尝试使用elasticSearch查询获取所有结果,但如果$ limit value为null,则只返回10个结果。
$videos = Video::searchByQuery([
'match' => [
$field => $request->$field
],
],null,null,null);
那么如何获得所有结果?
答案 0 :(得分:1)
那是因为default size for requests is 10并且未向任何框架传递长度限制可能会将其设置为默认值。您可以使用from和size大值:
虽然from和size可以设置为请求参数,但也可以在搜索主体中设置它们。从默认值为0,大小默认为10.
但是,正如question very similar to yours所指出的那样,仅使用from
和size
以及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);