ElasticSearch と Elastica ( http://elastica.io/ )を使用して、検索の実装をまとめています。
現在、ElasticSearch の Count API で説明されているように、カウント検索を実行する方法がわかりません。
誰かが私のためにこれをクリアできますか? すべてのエラスティカ オブジェクトがどのように関連しているかについては、まだ 100% 理解していないので、いくつかのサンプル コードは素晴らしいものです。
前もって感謝します。
ElasticSearch と Elastica ( http://elastica.io/ )を使用して、検索の実装をまとめています。
現在、ElasticSearch の Count API で説明されているように、カウント検索を実行する方法がわかりません。
誰かが私のためにこれをクリアできますか? すべてのエラスティカ オブジェクトがどのように関連しているかについては、まだ 100% 理解していないので、いくつかのサンプル コードは素晴らしいものです。
前もって感謝します。
Searchクラス( http ://elastica.io/api/classes/Elastica.Search.html )。
search クラスで count($query, $fullResult = false) メソッドを呼び出して、search_type count としてクエリを実行できます。デフォルトでは、総ヒット数のみが返されます。$fullResult が true に設定されている場合、ファセットを含む完全な ResultSet が返されます。これは、サイズをゼロに設定して標準の検索を実行するよりも効率的です。
たとえば、クエリのヒット数を取得するには、次のようにします。
// Define a Query. E.g. a string query.
$elasticaQueryString = new \Elastica\Query\QueryString();
//'And' or 'Or' default : 'Or'
$elasticaQueryString->setDefaultOperator('AND');
$elasticaQueryString->setQuery('london');
// Create the actual search query object with some data.
$elasticaQuery = new \Elastica\Query();
$elasticaQuery->setQuery($elasticaQueryString);
// Setup elastica client connection to your easticsearch server (with default host and port)
$elasticaClient = new \Elastica\Client();
// Create an elastica search object
$elasticaSearch = new \Elastica\Search($elasticaClient);
// Call count method on search object to run a
$count = $elasticaSearch->count($elasticaQuery);
// output count
echo "<p>$count<p>";
より便利な例は、いくつかのファセットを含む完全な ResultSet を返し、それを特定のインデックスとタイプに制限することです。
// Define a Query. e.g. a string query.
$elasticaQueryString = new \Elastica\Query\QueryString();
//'And' or 'Or' default : 'Or'
$elasticaQueryString->setDefaultOperator('AND');
$elasticaQueryString->setQuery('london');
// Create some facets to be generated by query
$elasticaFacet1 = new \Elastica\Facet\Terms('myFacet1');
$elasticaFacet1->setField('colour');
$elasticaFacet1->setSize(10);
$elasticaFacet2 = new \Elastica\Facet\Terms('myFacet2');
$elasticaFacet2->setField('shape');
$elasticaFacet2->setSize(10);
// Create the actual search object with some data.
$elasticaQuery = new \Elastica\Query();
// add query string to query
$elasticaQuery->setQuery($elasticaQueryString);
//add facets to query
$elasticaQuery->addFacet($elasticaFacet1);
$elasticaQuery->addFacet($elasticaFacet2);
// Setup elastica client connection to your elasticsearch server
$elasticaClient = new \Elastica\Client(array(
'host' => 'localhost',
'port' => 9200
));
// If you want to restrict your search to a particular index then get that
$elasticaIndex = $elasticaClient->getIndex('myIndex');
// If you want to restrict your search to a particular type then get that
$elasticaType = $elasticaIndex->getType('myType');
// Create and elastica Search object
$elasticaSearch = new \Elastica\Search($elasticaClient);
// addIndex and addType are optional and will restrict the search to those respectivly
$countResults = $elasticaSearch->addIndex($elasticaIndex)->addType($elasticaType)->count($elasticaQuery, true);
//output total hits
echo "<p>{$countResults->getTotalHits()}</p>";
//output list of facets
echo "<ul>";
foreach ($countResults->getFacets() as $facetField => $resultTerms) {
echo "<li><span>$facetField</span><ul>";
foreach ($resultTerms['terms'] as $resultTerm) {
echo "<li>{$resultTerm['term']}: {$resultTerm['count']}</li>";
}
echo "</ul></li>";
}
echo "</ul>";
Elastica 2.2 では、次のことができます。
public function count($index)
{
$query = new Elastica\Query;
$query->setSize(0);
$results = $index->search($query);
$count = $results->getTotalHits();
return $count;
}