Elastica: лучший способ проверить, существует ли документ с идентификатором x?

Используя библиотеку PHP Elastica, мне интересно, как лучше всего проверить, существует ли документ с идентификатором = 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 , и один из ответов предлагает мой первый подход (эквивалент использования getDocument). Однако я не хочу, чтобы было выброшено исключение, как это было бы в случае с Elastica...


person RayOnAir    schedule 23.10.2013    source источник


Ответы (1)


Вместо того, чтобы предотвращать создание исключения, одним из способов было бы просто справиться с ним с помощью блока «Попробуй, брось и поймай», например:

try {
    $docPre = $elasticaType->getDocument(1);
} catch (Exception $e) {
    $docPre = NULL;
}
if ($docPre != NULL) {
    //do some stuff...
} else {
    //do something else...
}
person RayOnAir    schedule 23.10.2013
comment
Не работает для меня. Мне пришлось сделать так: catch (\Elastica\Exception\NotFoundException $e) { - person Ibrahim; 24.07.2018