4

我尝试使用 mongoosastic 进行搜索,但我不断收到“没有生活连接”错误和映射问题

这是代码

var mongoose = require('mongoose');
var mongoosastic = require('mongoosastic');
var Schema = mongoose.Schema;


var JobSchema = Schema({
  category: { type: Schema.Types.ObjectId, ref: 'Category', es_indexed:true},
  title: { type: String, es_indexed:true },

});

JobSchema.plugin(mongoosastic);
module.exports = mongoose.model('Job', JobSchema);

路由.js

var Job = require('../models/job');

Job.createMapping(function(err, mapping) {
  if (err) {
    console.log('error creating mapping (you can safely ignore this)');
    console.log(err);
  } else {
    console.log('mapping created!');
    console.log(mapping);
  }
});

app.post('/search', function(req, res, next) {
    Job.search({query_string: {query: req.body.q}}, function(err, results) {
        if (err) return next(err);
        res.send(results);
    });
});

我不断收到此错误,

在此处输入图像描述

任何有使用 mongoosastic 经验的人都可以告诉我,我该如何解决这个问题?

4

3 回答 3

1

我也面临同样的问题,但我现在使用下面的方法解决了

它非常简单:您必须在本地或其他任何地方安装弹性搜索

  1. 下载弹性搜索 http://www.elastic.co/downloads/elasticsearch
  2. 提取文件夹
  3. 从 cmd 或 Treminal 找到 bin 文件夹并在该文件夹中运行弹性搜索脚本
  4. nodejs代码中,默认情况下它会链接到localhost:9200所以不需要使用 new elasticsearch.Client({host: 'localhost:9200'}),但是如果你的弹性搜索在其他地方被部署了,那么你必须使用上面的客户端方法
于 2015-12-03T11:35:46.157 回答
1

将插件添加到JobSchema模型时,您需要传递第二个参数,说明如何连接到 Elasticsearch:

JobSchema.plugin(mongoosastic, {
  hosts: [
    'localhost:9200'
  ]
});

如果您准备好一个 Elasticsearch 客户端对象,您也可以重复使用它。

var esClient = new elasticsearch.Client({host: 'localhost:9200'});
JobSchema.plugin(mongoosastic, {
  esClient: esClient
})
于 2015-11-24T04:37:13.360 回答
0

我认为您必须创建一个客户端并将其传递给插件,但使用对我有用的 IP 地址。

// http://127.0.0.1:9200 == http://localhost:9200

var esClient = new elasticsearch.Client({host: 'http://127.0.0.1:9200'});
JobSchema.plugin(mongoosastic, {
    esClient: esClient
})

注意:如果您以前没有使用弹性搜索,您可能需要重新索引您的文档(我必须这样做,但我可能做错了什么)

参考这个答案:https ://stackoverflow.com/a/30204512/1146562

从该答案中,您可以将主机直接传递到插件中,而不必创建客户端。

于 2015-12-01T15:38:15.297 回答