Using the PHP Elastica library, I'm wondering what is the best way to check whether a document with Id=1 exists?

I was doing as follows:

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

However, the above code does not work because a NotFoundException is thrown by the getDocument() method if the document does not exist.

Alternatively, I could do a type "search" using something like this:

$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...
}

However, the above seems quite cumbersome... What's the better way? This other question applies to ElasticSearch, and one of the answers suggests my first approach (the equivalent to using getDocument). However, I do not want an Exception to be thrown, as it would be the case using Elastica...

有帮助吗?

解决方案

Rather than preventing the Exception from being thrown, one way would be to simply deal with it with a "Try, throw and catch" block like this:

try {
    $docPre = $elasticaType->getDocument(1);
} catch (Exception $e) {
    $docPre = NULL;
}
if ($docPre != NULL) {
    //do some stuff...
} else {
    //do something else...
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top