0

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)

4

1 に答える 1

6

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 クエリに「サイズ」と「オフセット」があるかどうかを確認できます。そうは言っても、もちろんページネーションはカスタムスコアで機能します。

于 2013-09-10T15:49:09.857 に答える