ElasticSearch不更新

时间:2016-07-25 13:12:35

标签: php elasticsearch

我们目前正在使用我们的网络应用程序实施ElasticSearch。我们通过使用官方elasticsearch-php framework来做到这一点。我们已经将这一点直接用于模型测试,因为它对我们所有人来说都是新的。

public function afterSave()
{
    $client = \Elasticsearch\ClientBuilder::create()->build();
    $params = [
        'index' => 'testindex',
        'type' => 'user',
        'id' => $this->id,
        'body' => [
            'id' => $this->id, 
            'name' => $this->firstname.' '.$this->lastname, 
            'email' => $this->email, 
            'test' => ''
        ]
    ];

    $response = $client->index($params);
}

public function afterUpdate()
{
    $client     =   \Elasticsearch\ClientBuilder::create()->build();
    $params     =   [
        'index' => 'testindex',
        'type' => 'user',
        'id' => $this->id
    ];

    $params['body']['doc']  =   [
        'test' => 'test2'
    ];

    $response = $client->update($params);
    var_dump($client->update($params));
    var_dump($response);
}

当我保存模型时,它会自动将其添加到ES,但是当我更新它时,它不会更新模型。当我var_dump()回复时,它不会抛出任何错误。

array(4) { ["index"]=> string(11) "testindex" ["type"]=> string(5) "user" ["id"]=> string(5) "20604" ["body"]=> array(1) { ["doc"]=> array(1) { ["test"]=> string(5) "test2" } } } 

array(4) { ["_index"]=> string(11) "testindex" ["_type"]=> string(5) "user" ["_id"]=> string(5) "20604" ["_version"]=> int(2) } 

array(4) { ["_index"]=> string(11) "testindex" ["_type"]=> string(5) "user" ["_id"]=> string(5) "20604" ["_version"]=> int(3) }

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

如果您使用的是Phalcon,则可能是由update()同时调用afterUpdate()afterSave()引起的。您应该在echo方法中放置几个​​afterSave();如果你看到它们两次就是问题。

您可以通过创建afterSave()句柄更新和afterCreate()句柄来阻止此行为。然后,您可以致电$model->create()来创建模型,并通过调用$model->save()来更新它们。

有关此行为的更多信息,请访问:https://docs.phalconphp.com/en/latest/reference/models.html#create-update-with-confidence