首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSElasticaBundle CustomScore查询分页

FOSElasticaBundle CustomScore查询分页
EN

Stack Overflow用户
提问于 2013-09-10 11:49:47
回答 1查看 4.3K关注 0票数 0

我刚刚开始使用FOSElasticaBundle,到目前为止我发现它非常适合使用。我不确定是因为我对包/Elastica不了解,还是我对ElasticSearch缺乏了解,但是是否有可能使用分页方式进行CustomScore查询?

如果我尝试在CustomQuery对象上调用setFrom/setSize,就会被告知这些方法不存在。如果我在那里创建了一个查询对象和setFrom,并将这个查询传递给CustomScore查询对象,那么分页参数就会被忽略。我已经把我的代码拷贝了一份.

代码语言:javascript
复制
        $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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-10 15:49:09

Size和From必须应用到顶级查询中,您将在这里丢失它们。

试试这个:

代码语言:javascript
复制
$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“和”偏移量“。尽管如此,当然分页与自定义分数一起工作。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18718211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档