Elastica:检查 ID 为 x 的文档是否存在的最佳方法?

标签 elastica

使用 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...
}

但是,上面的方法似乎很麻烦……有什么更好的方法?
This other question applies to ElasticSearch ,其中一个答案建议了我的第一种方法(相当于使用 getDocument)。但是,我不希望抛出异常,因为使用 Elastica 就是这种情况......

最佳答案

一种方法不是阻止抛出异常,而是简单地使用“尝试,抛出和捕获”块来处理它,如下所示:

try {
    $docPre = $elasticaType->getDocument(1);
} catch (Exception $e) {
    $docPre = NULL;
}
if ($docPre != NULL) {
    //do some stuff...
} else {
    //do something else...
}

关于Elastica:检查 ID 为 x 的文档是否存在的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19548215/

相关文章:

php - 在Symfony中获得Elasticsearch分数

sql - 如何将 “and or” where子句从sql查询转换为elasticsearch过滤器

php - 如何在elastica php中一次性更新多个数据?

elasticsearch - 如果字段存在,Elasticsearch查询将应用范围

symfony - "mappings"下无法识别的选项 "fos_elastica.indexes.app.types.user"

elasticsearch - Elasticsearch查询普及度有什么方法吗?

elasticsearch - 如何按单个字段对 Elasticsearch 中的文档进行分组?

elasticsearch - 通过提及次数的Elasticsearch过滤器

elasticsearch - 如何包含按实体类型分组的搜索建议?