簡體   English   中英

更新elasticsearch php“ document_missing_exception”時出錯

[英]Error on update elasticsearch php “document_missing_exception”

我在PHP和所需的數據映射后使用Elasticsearch。 我通過插入函數插入數據,如下所示:

public function insertNode ($event_id) {
    global $conn1;
    $client = $this->elasticclient;
    $params = null;

    $stmt = "SELECT
                 events.event_id,
                 events.event_title,
                 events.event_details,
                 DATE_FORMAT(events.added_date,'%d-%m-%Y') AS added_date 
                 FROM events
                 WHERE events.event_id = $event_id";

    $query = $conn1->prepare($stmt);
    $query->execute();
    $rows = $query->fetchAll(PDO::FETCH_ASSOC);

    foreach ($rows as $row) {
        $params = [
            'index' => 'eventree',
            'type'  => 'events',
            'id'    => $row['event_id'],
            'body'  => [
                'EVENT_TITLE'   => $row['event_title'],
                'EVENT_DETAILS' => $row['event_details'],
                'START_TIME'    => $row['start_time'],
                'ADDED_DATE'    => $row['added_date'],
                'STATUS'        => $row['status']
            ]
        ];
    }

    $responses = $client->index($params);

    return true;
}

在下面,您可以看到我如何更新數據:

public function updateNode($event_id) {
    global $conn1;
    $client = $this->elasticclient;
    $params = null;

    $stmt = "SELECT
                 events.event_id,
                 events.event_title,
                 events.event_details,
                 events.status,
                 DATE_FORMAT(events.added_date,'%d-%m-%Y') AS added_date 
                 FROM events
                 WHERE events.event_id = $event_id";

    $query = $conn1->prepare($stmt);
    $query->execute();
    $rows = $query->fetchAll(PDO::FETCH_ASSOC);

    foreach ($rows as $row) {
        $params = [
            'index' => 'eventree',
            'type' => 'events',
            'id' => $row['event_id'],
            'body' => [
                'doc' => [
                    'EVENT_TITLE' => $row['event_title'],
                    'EVENT_DETAILS' => $row['event_details'],
                    'START_TIME' => $row['start_time'],
                    'ADDED_DATE' => $row['added_date'],
                    'STATUS' => $row['status']
        ]]];
    }

    $responses = $client->update($params);
    return true;
}

問題是,更新過程將不接受大於9的ID,盡管有些記錄的ID格數大於9。這是運行更新過程后出現的錯誤:

{
"error": "{\"error\":{\"root_cause\":[{\"type\":\"document_missing_exception\",\"reason\":\"[events][10]: document missing\",\"index_uuid\":\"6l5vWeLLSb6CvcCsqTws9g\",\"shard\":\"1\",\"index\":\"eventree\"}],\"type\":\"document_missing_exception\",\"reason\":\"[events][10]: document missing\",\"index_uuid\":\"6l5vWeLLSb6CvcCsqTws9g\",\"shard\":\"1\",\"index\":\"eventree\"},\"status\":404}"
}

您的php代碼錯誤,您一直循環$rows並覆蓋$params變量!

正確的代碼

    public function insertNode($event_id) {
global $conn1;
$client = $this->elasticclient;
$params = null;

$stmt = "SELECT
             events.event_id,
             events.event_title,
             events.event_details,
             DATE_FORMAT(events.added_date,'%d-%m-%Y') AS added_date 
             FROM events
             WHERE events.event_id = $event_id";

$query = $conn1->prepare($stmt);
$query->execute();
$rows = $query->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row) {
    $params = [
        'index' => 'eventree',
        'type' => 'events',
        'id' => $row['event_id'],
        'body' => [
            'EVENT_TITLE' => $row['event_title'],
            'EVENT_DETAILS' => $row['event_details'],
            'START_TIME' => $row['start_time'],
            'ADDED_DATE' => $row['added_date'],
            'STATUS' => $row['status']
    ]];
    $responses = $client->index($params);
}

return true;

}

public function updateNode($event_id) {
global $conn1;
$client = $this->elasticclient;
$params = null;

$stmt = "SELECT
             events.event_id,
             events.event_title,
             events.event_details,
             events.status,
             DATE_FORMAT(events.added_date,'%d-%m-%Y') AS added_date 
             FROM events
             WHERE events.event_id = $event_id";

$query = $conn1->prepare($stmt);
$query->execute();
$rows = $query->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row) {
    $params = [
        'index' => 'eventree',
        'type' => 'events',
        'id' => $row['event_id'],
        'body' => [
            'doc' => [
                'EVENT_TITLE' => $row['event_title'],
                'EVENT_DETAILS' => $row['event_details'],
                'START_TIME' => $row['start_time'],
                'ADDED_DATE' => $row['added_date'],
                'STATUS' => $row['status']
    ]]];

$responses = $client->update($params);
}

return true;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM