在 mongoosastic 中搜索没有给出任何结果
Search in mongoosastic doesn't give any result
我尝试使用 mongoosastic 搜索,但它不起作用
Job.js(猫鼬模式)
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"
}
当我尝试 运行 搜索并像 "Engineer" 这样搜索时,我一直得到这个结果。
已为卷曲更新
curl -XGET localhost:9200/_mapping
curl -XGET localhost:9200/_search
由于 title
是一个分析字符串,它的值使用标准分析器进行索引,即小写形式,因此 "Engineer" 将被索引,而 "engineer"
尝试以小写形式搜索 "engineer"。
更新
根据我们的讨论,问题似乎很简单,就是你的 Elasticsearch 是空的。由于您在 MongoDB 中有现有数据,您需要确保在模型上使用 call the synchronize()
方法,以便在 Elasticsearch 中索引所有 MongoDB 集合。
我尝试使用 mongoosastic 搜索,但它不起作用
Job.js(猫鼬模式)
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"
}
当我尝试 运行 搜索并像 "Engineer" 这样搜索时,我一直得到这个结果。
已为卷曲更新
curl -XGET localhost:9200/_mapping
curl -XGET localhost:9200/_search
由于 title
是一个分析字符串,它的值使用标准分析器进行索引,即小写形式,因此 "Engineer" 将被索引,而 "engineer"
尝试以小写形式搜索 "engineer"。
更新
根据我们的讨论,问题似乎很简单,就是你的 Elasticsearch 是空的。由于您在 MongoDB 中有现有数据,您需要确保在模型上使用 call the synchronize()
方法,以便在 Elasticsearch 中索引所有 MongoDB 集合。