在 Symfony 中获取 Elasticsearch 分数

Get Elasticsearch Score in Symfony

如果您通过 cURL 发出获取请求,Elasticsearch 会提供一个分数字段。

{
  "_index": "twitter",
  "_type": "tweet",
  "_id": "123",
  "_score": 4.2,
  "firstName": "Max"
  "lastName": "Mustermann"
}

有没有办法在 symfony 中获得这个分数。我想知道 FOSElasticaBundle 是否提供了类似于下面的函数来获取分数。

$finder = $this->container->get('fos_elastica.finder.app.article');
$boolQuery = new \Elastica\Query\BoolQuery();

$fieldQuery = new \Elastica\Query\Match();
$fieldQuery->setFieldQuery('title', 'I am a title string');
$fieldQuery->setFieldParam('title', 'analyzer', 'my_analyzer');
$boolQuery->addShould($fieldQuery);

当使用 FOSElasticaBundle 搜索时,您会得到一个 Elastica\ResultSet,里面有 Elastica\Result。您可以迭代这些结果,它们有一个 getScore 方法来获取您需要的结果。

$resultSet = $this->store->search($query);

$results = $resultSet->getResults();

foreach ($results as $result) {
    $score = $result->getScore();
}

或者,您可以通过以下方式获得分数:$result->getParam('_score');

如果尝试从扩展 FOS\ElasticaBundle\Repository 的 class 中更改此设置,请考虑使用 $this->findHybrid()。该方法 returns 一个包含 HybridResult 个对象的数组。每个 HybridResult 依次包含转换后的实体和结果数据(包括分数)。