FosElasticaBundle (@dev) を使用して Symfony 2.5.6 プロジェクトに参加しています。
私のプロジェクトでは、Elastic Search でのリクエストの合計ヒット数を取得する必要があります。つまり、通常のリクエストで Elastic Search にクエリを実行していますが、特別な「カウント」URL を使用しています。
localhost:9200/_search?search_type=count
「search_type=count」URL パラメータに注意してください。
クエリの例を次に示します。
{
"query": {
"filtered": {
"query": {
"match_all": []
},
"filter": {
"bool": {
"must": [
{
"terms": {
"media.category.id": [
681
]
}
}
]
}
}
}
},
"sort": {
"published_at": {
"order": "desc"
}
},
"size": 1
}
結果には通常の JSON 応答が含まれますが、 partにドキュメントはありませんhits
。この応答から、合計数を簡単に取得できます。
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 81,
"max_score": 0,
"hits": [ ]
}
}
わかりましたhits.total == 81
。
今、リポジトリから FOSElasticaBundle を介して同じことを行うソリューションを見つけることができませんでした。
私はこれを試しました:
$query = (...) // building the Elastica query here
$count = $this->finder->findPaginated(
$query,
array(ES::OPTION_SEARCH_TYPE => ES::OPTION_SEARCH_TYPE_COUNT)
)->getNbResults();
しかし、クラス「Pagerfanta」をロードしようとしました。私はPagerfantaを望んでいません。
次に、これ:
$count = $this->finder->createPaginatorAdapter(
$query,
array(ES::OPTION_SEARCH_TYPE => ES::OPTION_SEARCH_TYPE_COUNT)
)->getTotalHits();
しかし、それは常に私に0を与えます。
リポジトリから Elastica Finder サービスにアクセスできれば簡単です (その後、クエリ検索から ResultSet を取得でき、この ResultSet には正しい getTotalHits() メソッドがあります)。しかし、リポジトリからのサービス...ご存知のとおりです。
助けや手がかりをありがとう!