如何在elastica中更新多个数据? 逻辑就像,我有一个数组或一串id, 那么我需要一次更新连接到每个或该ID的所有数据的状态属性,那么怎么做呢? 本文档没有样本
http://elastica.io/api/classes/Elastica.Bulk.Action.UpdateDocument.html
甚至可能吗?
答案 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)
可以使用Bulk
和UpdateDocument
批量操作来更新每个文档中的一个字段:
$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循环内部,用于多次更新文档。这经过我自己的一些试验和错误后解决了我的问题。我不知道这是否是更新的最佳做法。但它的工作方式与我想要的一样。