弹性搜索未定义?

时间:2015-06-08 03:27:12

标签: node.js mongodb elasticsearch

我在我的linux服务器上使用mongo-connector

pip install mongo-connector

python mongo_connector.py -m localhost:27217 -t http://localhost:9200

在我的本地node.js服务器内我使用的是我的linux服务器上托管的mongoDB

var Movie = require('../models/Movie');
var mongoosastic = require("mongoosastic");
var elasticsearch = require('elasticsearch');

movie = new Movie({title: 'Warrior'});

movie.save(function() {
  console.log(arguments)
  Movie.search({query:"Warrior"}, function(err, results) {
    console.log(results);
  });
});

模式

var mongoose = require('mongoose');
var elasticsearch = require('elasticsearch');
var mongoosastic = require("mongoosastic");

var movieSchema = new mongoose.Schema({

  language: String,
  year: String,
  title: { type:String, es_indexed:true },
  director: String

});


movieSchema.plugin(mongoosastic);

module.exports = mongoose.model('Movie', movieSchema);

我一直都没有定义。我认为数据已编入索引,但我无法搜索它。

测试

curl -XPUT 'http://localhost:9200/blog/user/dilbert' -d '{ "name" : "Dilbert Brown" }'

curl -XGET 'http://localhost:9200/blog/user/dilbert?pretty=true'

{
  "_index" : "blog",
  "_type" : "user",
  "_id" : "dilbert",
  "_version" : 1,
  "found" : true,
  "_source":{ "name" : "Dilbert Brown" }
}

问题可能是node.js托管在我的本地机器上,mongoDB / elasticsearch在我的linux服务器上。

1 个答案:

答案 0 :(得分:1)

通过指出您的node.js和ES位于两个不同主机上的事实,您可能已经指出了这个问题。

查看命令行:

python mongo_connector.py -m localhost:27217 -t http://localhost:9200
  1. -m指向localhost端口27217上的Mongo数据库(除非该端口是到远程linux服务器的SSH隧道的入口)
  2. -t指向复制端点(即本地计算机端口9200上的Elasticsearch)
  3. 根据您的声明,Elasticsearch和MongoDB托管在您的远程Linux服务器上,您应该用您的Linux服务器的主机名或IP地址替换localhost,并确保端口27217和9200在该服务器上打开主机。

    然后你还应该确保你的Node.js和mongoosastic指向你的linux服务器,因为默认它使用localhost:9200,即你的本地机器。所以请改用它并指向你的linux服务器:

    movieSchema.plugin(mongoosastic, {
      hosts: [
        'your_linux_host:9200'
      ]
    });
    

    此外,您的mongoose连接也指向您的Linux服务器。

    mongoose.connect('mongodb://your_linux_host/your_database');