我尝试使用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"
}
当我尝试运行搜索并搜索“工程师”时,我不断得到这个结果。
更新了Curl
curl -XGET localhost:9200 / _mapping
curl -XGET localhost:9200 / _search
答案 0 :(得分:1)
由于title
是一个经过分析的字符串,因此使用标准分析器对其值进行索引,即采用小写形式,因此“工程师”将被编入索引,“工程师”
尝试用小写字母搜索“engineer”。
<强>更新强>
根据我们的讨论,似乎问题只是你的Elasticsearch是空的。由于您在MongoDB中有现有数据,因此需要确保模型上有call the synchronize()
方法,以便为Elasticsearch中的所有MongoDB集合编制索引。