当前位置: 首页 > 面试题库 >

FOSElasticaBundle CustomScore查询分页

拓拔迪
2023-03-14
问题内容

我刚刚开始使用FOSElasticaBundle,到目前为止发现它确实非常好用。我不确定这是我对软件包/
Elastica的无知还是我对ElasticSearch的总体了解不足,但是是否可以通过分页进行CustomScore查询?

如果我尝试在CustomQuery对象上调用setFrom /
setSize,则会被告知该方法不存在。如果我创建一个Query对象并在其中设置setFrom和size并将该查询传递到CustomScore查询对象中,则将忽略分页参数。我已经包含了我的代码的一份副本,以说明它的价值。

        $queryString = new QueryString();
        $queryString->setFields(array('_all'))
            ->setDefaultOperator('OR')
            ->setQuery($terms);

        $query = new \Elastica\Query();
        $query->setQuery($queryString);
        $query->setSize($maxItems);
        $query->setFrom(($page - 1) * $maxItems);

        $custScoreQuery = new CustomScore();
        $custScoreQuery->setQuery($query);
        $custScoreQuery->setScript("_score * (doc['section.id'] == 7) ? 0.5 : 1");
        $index   = $this->get('fos_elastica.index.search_en_gb');
        $results = $index->search($custScoreQuery);

任何帮助都乐意接受:o)


问题答案:

“大小”和“自”必须应用于顶级查询,在这里您将丢失它们。

试试这个:

$queryString = new QueryString();
$queryString->setFields(array('_all'))
        ->setDefaultOperator('OR')
        ->setQuery($terms);

$custScoreQuery = new CustomScore();
$custScoreQuery->setQuery($queryString);
$custScoreQuery->setScript("_score * (doc['section.id'] == 7) ? 0.5 : 1");

$query = new \Elastica\Query();
$query->setQuery($custScoreQuery);
$query->setSize($maxItems);
$query->setFrom(($page - 1) * $maxItems);

$index   = $this->get('fos_elastica.index.search_en_gb');
$results = $index->search($query);

另外,打开Elastica中的日志,您将能够查看Json查询中是否存在“大小”和“偏移”。话虽这么说,分页当然可以与html" target="_blank">自定义分数一起使用。



 类似资料:
  • 使用数据库的应用程序,多数情况下都需要使用 “分页” 这个功能。尤其是在 Web 应用程序中,后端的分页查询尤其的普遍。 在以往的使用经验中,一个分页查询,除了能获取到一个列表外,我们通常需要如下几个信息才能在客户端显示出一个完整的翻页条。 当前页数 -- 第几页 页大小 -- 每页有多少条记录 总页数 -- 一共多少页 总记录数 -- 如果不分页,一共有多少条记录 当我们获得了这四条信息后,对于

  • limt 分页查询 查询前3条记录 分页公式: (offset - 1) * limit SELECT name FROM `student` LIMIT 0, 3; Student.findAll( { attributes:['name'], // 当前页 offset:0, // 每页显示的条数 limit:3 }) 分页案例 router.ge

  • 在使用 hyperf/database 来查询数据时,可以很方便的通过与 hyperf/paginator 组件配合便捷地对查询结果进行分页。 使用方法 在您通过 查询构造器 或 模型 查询数据时,可以通过 paginate 方法来处理分页,该方法会自动根据用户正在查看的页面来设置限制和偏移量,默认情况下,通过当前 HTTP 请求所带的 page 参数的值来检测当前的页数: 由于 Hyperf 当

  • 问题内容: 我希望我能够解释困扰我的问题。我有以下分层数据集(这只是34K记录的子集) 这是树的代表 我需要的是清单的所有记录,带有exam = N和潜在的extest =’J’记录,可以嵌套。 给我 但是我需要的是 当我遇到EXAM =’N’记录时,需要停止运行。 我需要类似“停止于”子句的内容。 如何才能做到这一点? 问题答案: 罗伯特 您可以通过在connect by子句中添加“ exam

  • 问题内容: 输入表: 提交 提交包含四列,表示针对不同问题提交的不同参赛者的ID。一个竞赛者可以针对一个问题提交多次以上。因此,针对可能会出现多次。 产出表: 总分 在这里,我们将总分视为- 要取得总分,我必须最多获得一个参赛者ID,如果有多个相同的Challenge_ID,则总和不等于总和。但是,我坚持这样做,该怎么做。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • GROUP 分组查询 >[danger] 分组查询,顾名思义就是按照组区分开,进行查询,比如按照性别分组 > 注意!!! group by 后面分组的字段不能随便加,比如 group by 'sex' 那么,查询字段必须为 sex 按照性别分组查询全部数学成绩的平均分 const { Sequelize } = app; // 按照性别分组查询全班数学成绩的平均分 const ret = awai