通过javascript循环添加文档到ElasticSearch索引不工作

Add documents to ElasticSearch index through javascript loop does not work

本文关键字:ElasticSearch 索引 工作 文档 javascript 循环 添加 通过      更新时间:2023-09-26

我检索了很多行从我的PostgreSQL数据库(存储在result.rows),我想把它们添加到我的ElasticSearch索引。

只添加一个文档就可以了:

var r = result.rows[0];
esClient.index({
  index: 'families',
  type: 'families',
  id: r.family_accession,
  body: {
      'family_accession'  : r.family_accession,
      'count_seq'         : r.count_seq,
      'count_taxon'       : r.count_taxon
  }
}, function (error, response) {
  console.log(error);
});

但是当我尝试在循环中调用它时,它根本不起作用:

result.rows.forEach(function (r) {
  esClient.index({
    index: 'families',
    type: 'families',
    id: r.family_accession,
    body: {
        'family_accession'  : r.family_accession,
        'count_seq'         : r.count_seq,
        'count_taxon'       : r.count_taxon
    }
  }, function (error, response) {
    console.log(error);
  });
});

由于您在循环中调用异步代码段,因此在调用esClient.index()函数时存在的上下文在回调执行时不再存在。

你需要把它包在闭包中,以保持执行上下文。

result.rows.forEach(function (r) {
  (function( row ) {
    esClient.index({
      index: 'families',
      type: 'families',
      id: row.family_accession,
      body: {
          'family_accession'  : row.family_accession,
          'count_seq'         : row.count_seq,
          'count_taxon'       : row.count_taxon
      }
    }, function (error, response) {
      console.log(error);
    });
  })( r );
});