我刚刚开始使用FOSElasticaBundle,到目前为止我发现它非常适合使用。我不确定是因为我对包/Elastica不了解,还是我对ElasticSearch缺乏了解,但是是否有可能使用分页方式进行CustomScore查询?
如果我尝试在CustomQuery对象上调用setFrom/setSize,就会被告知这些方法不存在。如果我在那里创建了一个查询对象和setFrom,并将这个查询传递给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)
发布于 2013-09-10 15:49:09
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“和”偏移量“。尽管如此,当然分页与自定义分数一起工作。
https://stackoverflow.com/questions/18718211
复制相似问题