【发布时间】:2014-06-23 06:20:02
【问题描述】:
是否可以在索引到 Elasticsearch 之前展平或解析对其他集合的引用?
例如我有这个架构:
var PartSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
province : {
type : mongoose.Schema.ObjectId,
ref : 'Province',
required: true
},
});
使用 mongoriver,省属性被索引为 ObjectId,因此在我的应用程序的搜索结果中,省是对象 ID,因此对用户没有用,所以我想展平/解析省属性,以便我可以访问省份的属性,例如:part.province.name、part.province.createdAt 等...
我最初的解决方案是使用脚本过滤器和映射。这是我所做的:
在 ES 上定义一个映射
curl -XPUT 'http://localhost:9200/parts/part/_mapping' -d '{"properties":{"__v":{"type":"long"},
"title":{"type":"string"},
"province":{
"type":"nested",
"properties": {
"name" : {"type": "string"}
}
}}}'
创造了一条河流:
curl -XPUT "localhost:9200/_river/pdm/_meta" -d '
{
"type": "mongodb",
"mongodb": {
"servers": [
{ "host": "localhost", "port": 27017 }
],
"db": "pdm",
"collection": "parts"
},
"index": {
"name": "parts",
"type": "part"
}
}'
创建了一个脚本:
ctx.document.province = {};
ctx.document.province.name = 'Static name to be inserted by script';
它有效,但目前脚本上的名称只是静态的。显然我需要从 mongodb 数据库中动态获取它,所以我尝试使用 lang-javascript 通过 REST api 使用 ajax 与 MongoDB 进行通信,不幸的是它不起作用,因为我认为不可能在浏览器之外使用 ajax。但即使这可行,我也不确定它是否是一个不错且有效的解决方案。
关于如何解决我的问题的任何想法?或者在使用 mongoriver 索引到 ES 之前,还有其他方法可以展平/解析对象引用?任何建议将不胜感激。
提前致谢:)
注意:我还需要在修改时自动更新已编入索引的现有文档中的对象引用。
相关问题:https://groups.google.com/forum/#!topic/elasticsearch/e3CelbOkgWk
【问题讨论】:
标签: javascript mongodb elasticsearch