【发布时间】:2015-11-24 11:39:30
【问题描述】:
这是我的目标。我想在任务中找到文本,即 task.name.
{
"_id" : ObjectId("55e2acd77e5e4ddc037b3ef5"),
"userId" : "123",
"username" : "user12",
"address" : "abc",
"number" : 928228828282.0,
"task" : [{
"name" : "metac",
"productCode" : "1234",
"_id" : ObjectId("55e2acd77e5e4ddc037b3ef7")
}, {
"name" : "alfa33",
"productCode" : "1234",
"_id" : ObjectId("55e2acd77e5e4ddc037b3ef6")
}],
"__v" : 0
}
所以当我查询它时,它将返回所有任务。
curl -XPOST 'localhost:9200/userprofiles/_search?pretty' -d '
{
"query": { "match": { "name": "alfa33" } }
}
输出:
{
"took": 51,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.19178301,
"hits": [
{
"_index": "userprofiles",
"_type": "userprofile",
"_id": "55e2acd77e5e4ddc037b3ef5",
"_score": 0.19178301,
"_source": {
"userId": "123",
"username": "user12",
"address": "abc",
"number": 928228828282,
"task": [
{
"name": "metac"
},
{
"name": "alfa33"
}
]
}
}
]
}
}
如您所见,任务返回完整数组,我只需要选择 1 个任务。
我在节点内部使用 mongoosastic,它会给我带来问题,所以我尝试直接使用请求到 Elasticsearch。
mongoosastic 配置 - >elasticsearch search text return full array issue 我尝试了这个解决方案,但不起作用。
目前我在 git bush 中使用 curl 命令搜索我的结果,而不是使用搜索功能
编辑
文件:- 猫鼬和猫鼬。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var medicineSchema = require('./search')
var mongoosastic = require("mongoosastic");
var UserProfileSchema = new Schema({
userId: String,
username: String,
address: String,
number: Number,
task: [{
name: {
type: String,
es_boost: 2.0 // or es_indexed:true
},
taskCode: String,
}]
});
UserProfileSchema.plugin(mongoosastic);
UserProfileSchema.plugin(mongoosastic, {
host: "localhost",
port: 9200,
// ,curlDebug: true
});
UserProfile = module.exports = mongoose.model('UserProfile', UserProfileSchema);
UserProfile.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);
}
});
还有我的搜索查询:
var UserProfileSchema = require('../../app/models/user');
UserProfileSchema.search({
query_string: {
query: name
}
}, function(err, result) {
if (err) {
callback({
RESULT_CODE: '-1',
MESSAGE: 'System error'
});
} else {
callback({
RESULT_CODE: '1',
DATA: result
});
}
});
【问题讨论】:
-
请至少添加您用来检索它的代码
-
@Michelem 我给出了我有问题的代码的链接,然后我再次更新了我的问题
-
@Michelem 我正在创建默认映射,正如您在代码中看到的那样
-
我认为这个查询是正确的,看
"hits": { "total": 1, ...},这意味着它找到了有任务的用户,但用户还有其他任务,查询返回的用户,而不是任务本身,如果你只想得到任务,然后为任务 API 制作处理程序,目前您正在点击localhost:9200/userprofiles/_search?pretty,例如为localhost:9200/tasks/_search?pretty制作 API -
@evc 哦,是的,你是对的。
标签: node.js elasticsearch full-text-search mongoosastic