我刚刚开始使用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查询中是否存在“大小”和“偏移”。话虽这么说,分页当然可以与自定义分数一起使用。