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

时间:2015-07-15 04:06:05

标签: php elastica

如何在elastica中更新多个数据? 逻辑就像,我有一个数组或一串id, 那么我需要一次更新连接到每个或该ID的所有数据的状态属性,那么怎么做呢? 本文档没有样本

http://elastica.io/api/classes/Elastica.Bulk.Action.UpdateDocument.html

甚至可能吗?

3 个答案:

答案 0 :(得分:4)

这是可能的,但你不能仅仅更新一个字段,因为ES不会这样工作。

您需要先检索完整文档,更改字段值并再次将文档保存到ES(使用与之前相同的ID)。

除此之外,多个upsert(添加和更新操作之间没有区别)如下所示:

#include<stdio.h>
#include<math.h>
int main()
{
float i = 2.5;
printf("%d, %f", floor(i), ceil(i));
return 0;
}

答案 1 :(得分:1)

可以使用BulkUpdateDocument批量操作来更新每个文档中的一个字段:

$client = new Elastica\Client();

$bulk = new Elastica\Bulk();
$bulk->setIndex('index');
$bulk->setType('type');

$bulk->addAction(
    new Elastica\Bulk\Action\UpdateDocument(
        new Elastica\Document('id1', array('one_field'=>'value1'))
    )
);
$bulk->addAction(
    new Elastica\Bulk\Action\UpdateDocument(
        new Elastica\Document('id2', array('one_field'=>'value2'))
    )
);

$bulk->send();

答案 2 :(得分:0)

根据文档,有updateDocument函数 为了解决我的问题,我需要传递一组文档,类似于上面例子中的文件

    $index = $this->client->getIndex($this->index);
    $type = $index->getType($this->type);
    $doc = new \Elastica\Document(
            $object->whateverIDisIt, $object, $this->type, $this->index
    );
    $response = $type->updateDocument($doc);

我添加的这个例子仅用于单个文档,我的意思是单个更新。当然,当我说我需要传递一个数组时,这意味着,上面的内容是在一个foreach循环内部,用于多次更新文档。这经过我自己的一些试验和错误后解决了我的问题。我不知道这是否是更新的最佳做法。但它的工作方式与我想要的一样。