在mongoosastic中搜索不会给出任何结果

时间:2015-11-24 07:25:26

标签: node.js elasticsearch mongoose mongoosastic

我尝试使用mongoosastic搜索,但它不起作用

Job.js(Mongoose架构)

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

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


JobSchema.plugin(timestamps);
JobSchema.plugin(mongoosastic, {
  hosts: [
    'localhost:9200'
  ]});
module.exports = mongoose.model('Job', JobSchema);

Routes.js

var express = require('express'); 
var app = express();       
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('/api/search/', function(req, res, next) {
  Job.search({query_string: {query: req.body.test}}, function(err, results) {
        if (err) return next(err);
        res.send(results);
    });
});

这是已经保存在mongodb中的数据集

    {
     "id": 12313,
     "title": "Engineer"
    },
    {
     "id": 13123,
     "title": "Doctor"  
    },
    {
     "id": 121243134,
     "title": "Software Engineer"
    }

当我尝试运行搜索并搜索“工程师”时,我不断得到这个结果。

enter image description here

更新了Curl

curl -XGET localhost:9200 / _mapping

enter image description here

curl -XGET localhost:9200 / _search

enter image description here

1 个答案:

答案 0 :(得分:1)

由于title是一个经过分析的字符串,因此使用标准分析器对其值进行索引,即采用小写形式,因此“工程师”将被编入索引,“工程师”

尝试用小写字母搜索“engineer”。

<强>更新

根据我们的讨论,似乎问题只是你的Elasticsearch是空的。由于您在MongoDB中有现有数据,因此需要确保模型上有call the synchronize()方法,以便为Elasticsearch中的所有MongoDB集合编制索引。