【问题标题】:FOSElasticaBundle CustomScore query paginationFOSElasticaBundle CustomScore 查询分页
【发布时间】:2013-09-14 02:54:44
【问题描述】:

我刚刚开始使用 FOSElasticaBundle,到目前为止发现它非常好用。我不确定是我对 bundle/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)

【问题讨论】:

    标签: php symfony pagination elasticsearch elastica


    【解决方案1】:

    Size 和 From 必须应用于顶级查询,您在此处丢失了它们。

    试试这个:

    $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查询中是否有“size”和“offset”。话虽如此,分页当然适用于自定义分数。

    【讨论】:

    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 2017-07-24
    • 2015-07-07
    • 2012-05-24
    • 2011-08-07
    • 2020-05-21
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多