4

PHP Elastica ライブラリを使用して、Id=1 のドキュメントが存在するかどうかを確認する最良の方法は何ですか?

私は次のようにしていました:

$docPre = $elasticaType->getDocument(1);
if ($docPre) {
    //do some stuff...
} else {
    //do something else...
}

ただし、ドキュメントが存在しない場合は getDocument() メソッドによって NotFoundException がスローされるため、上記のコードは機能しません。

または、次のようなものを使用して「検索」タイプを実行できます。

$elasticaQueryString = new \Elastica\Query\QueryString();
$elasticaQueryString->setParam('id', 1);
$elasticaQuery = new \Elastica\Query();
$elasticaQuery->setQuery($elasticaQueryString);
$resultSet = $elasticaType->search($elasticaQuery);
$count = $resultSet->count();
if ($count > 0) {
    //do some stuff...
} else {
    //do something else...
}

しかし、上記はかなり面倒に思えます...より良い方法は何ですか? この他の質問は ElasticSearchに適用され、回答の 1 つは私の最初のアプローチ ( getDocument を使用することと同等) を示唆しています。ただし、エラスティカを使用する場合と同様に、例外をスローしたくありません...

4

1 に答える 1

7

例外がスローされるのを防ぐのではなく、次のような「試行、スロー、キャッチ」ブロックを使用して単純に処理する方法があります。

try {
    $docPre = $elasticaType->getDocument(1);
} catch (Exception $e) {
    $docPre = NULL;
}
if ($docPre != NULL) {
    //do some stuff...
} else {
    //do something else...
}
于 2013-10-23T17:42:43.150 に答える