【问题标题】:Elasticsearch failed to parse exception-- bulk indexingElasticsearch 解析异常失败——批量索引
【发布时间】:2016-02-18 11:20:28
【问题描述】:

我正在尝试在弹性搜索中批量上传,并且我尝试插入的每条记录都出现此错误。 请帮我解决这个问题。

{"took":2828,"errors":true,"items":[{"index":{"_index":"abc","_type":"abc","_id":"0","status":400,"error":{"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"not_x_content_exception","reason":"Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"}}}}]}

这是我正在使用的代码 我正在使用 5.3 和 elasticsearch 驱动程序 1.4 <?php require_once "/var/www/ElasticSearch/models/ElasticSearchModels.php"; $params = array(); $ids = array(); for($i=0;$i<10;$i++){ $ids[] = $i; $params[] = array("here"=>"here","temp"=>"temp","pr"=>$i); } $elasticSearch = new ElasticSearch(); $elasticSearch->saveInElasticSearchBulk("products_staging","products_staging",$i‌​ds,$params); ?>

【问题讨论】:

  • 您可以显示您发送的示例查询吗?
  • 嘿,这是我用于批量插入的代码。 <?php require_once "/var/www/ElasticSearch/models/ElasticSearchModels.php"; $params = array(); $ids = array(); for($i=0;$i<10;$i++){ $ids[] = $i; $params[] = array("here"=>"here","temp"=>"temp","pr"=>$i); } $elasticSearch = new ElasticSearch(); $elasticSearch->saveInElasticSearchBulk("products_staging","products_staging",$ids,$params); ?>
  • 我想更新你的问题会更好。它会更清晰。但是我已经可以看到您没有正确构造 $params 数组。
  • 另外你使用的是哪个 PHP 框架?
  • 我正在使用 php 5.3 和 elasticsearch php 驱动程序 1.4

标签: php elasticsearch bulkinsert


【解决方案1】:

您没有正确构造 $params 数组,它应该看起来像这样:

$params = array(); 
for($i = 0; $i < 10; $i++){
  $params['body'][] = array(
    'index' => array(
        '_index' => 'products_staging',
        '_type' => 'products_staging',
        '_id' => $i
    )
  );
  $params['body'][] = array(
    'here' => 'here',
    'temp' => 'temp',
    'pr' => $i
  );
}

$elasticSearch = new ElasticSearch(); 
$elasticSearch->saveInElasticSearchBulk($params); 

【讨论】:

  • 我正在使用您在函数 saveInElasticSearchBulk 中创建的相同数组
  • 当然 ... ``` public function bulkIndexing($data) { $this->elasticSearchClient = $this->elasticSearchClient ? $this->elasticSearchClient : ElasticSearchConnections::getConnection();尝试{ $result = $this->elasticSearchClient->bulk($data); }catch(Exception $e){ if(DEBUG){ echo json_encode($e->getMessage()); } error_log(json_encode($e->getMessage())); } if ($result) { 返回 $result; } 否则 { 返回空值; } } ```
  • 同样,最好将其添加到您的问题中,以提高可读性。
【解决方案2】:

我解决了这个问题,因为我使用的是 ElasticSearch php 驱动程序 1.4。批量 api 的语法完全不同。

$params = array(); 
for($i = 0; $i < 10; $i++){



$params['body'][] = array(
    'index' => array(
        '_index' => 'products_staging',
        '_type' => 'products_staging',
        '_id' => $i
    )
  );
  $params['body'][] = json_encode(array(
    'here' => 'here',
    'temp' => 'temp',
    'pr' => $i
  );)
}

$elasticSearch = new ElasticSearch(); 
$elasticSearch->saveInElasticSearchBulk($params); 

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多