一尘不染

在node.js环境中将mongodb与elasticsearch集成

elasticsearch

我正在一个具有以下设置的项目:

  • 我有一个Amazon EC2集群,其中有一个主服务器,3个配置服务器和3个分片服务器。
  • Master运行着一个node.js应用程序,它基本上是一个使用Express.js模块编写的REST API。
  • 我正在使用mongodb作为数据库。主服务器正在运行“ mongos”服务,该服务将数据分片到3个分片服务器中。这些服务器上运行着“ mongod”服务。

通过此设置,我想集成elasticsearch来执行搜索查询。为此,我想在我的node.js REST
API应用程序中添加一条路由,以对存储在分片中的数据执行搜索查询。

如果我在独立计算机上运行三个分片,是否还需要执行其他步骤?如何配置Elasticsearch以访问分片中的数据以建立索引?它会自动检测到此配置并建立索引吗?有人可以向我提供完成此操作应遵循的步骤吗?


阅读 270

收藏
2020-06-22

共1个答案

一尘不染

我这样做是这样的:

我使用的是节点的sails.js框架,并使用mongo作为数据库。

首先,我已经使用npm安装了elasticsearch模块。然后将此代码添加到配置部分的名为 elasticSeach.js 的文件中。

它具有以下代码:

var elasticsearch = require('elasticsearch'),

  index = "Ur_elastic_index_name_goes_here",
  client = new elasticsearch.Client({
    host: 'localhost:9200',
    log: 'trace'
  });

module.exports.elasticSearchClient = client;

module.exports.elasticSearchConfig = {
  index: index
};

之后,只需创建一个文件 ElasticSearchService.js即可
在其中进行搜索,更新等所有操作。这是一个用elasticsearch索引方法对值进行索引的示例,该方法需要:

a) 类型

b) item ,它是json类型的对象,例如

item = {
 "name" : "vishal",
 "website" : "stackOverflow"
};

方法是

function indexItem(type, item) {
  return Q.promise(function(resolve, reject){
    elasticSearchClient
      .index({
        index: elasticSearchConfig.index,
        type: type,
        body: item
      })
      .then(function (response) {
        sails.log.info("ElasticSearchService#indexItem :: Response :: ", response);
        return resolve(response);
      })
      .catch(function(err) {
        sails.log.error("ElasticSearchService#indexItem :: Error :: ", err);
        return reject(err);
      });
  });
}

从任何地方调用此方法。

我使用诺言返回值。您无需担心分片实现及其他所有问题。弹性负责。

有关类型和映射的更多信息,请参见:https
:
//www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html

2020-06-22