如何在elasticsearch mongo river中解析或平坦化对象引用
How to resolve or flatten object references in elasticsearch mongo river?
是否有可能在索引到Elasticsearch之前平坦或解析对其他集合的引用?
示例:
var PartSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
province : {
type : mongoose.Schema.ObjectId,
ref : 'Province',
required: true
},
});
使用monoriver,省属性被索引为一个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通过使用ajax的REST api与mongodb通信,不幸的是它没有工作,因为我认为不可能在浏览器外使用ajax。但即使这有效,我也不确定这是否是一个好的和有效的解决方案。
关于如何解决我的问题有什么建议吗?或者也许有其他的方法来平面化/解析对象引用之前索引到ES使用monoriver ?如有任何建议,我将不胜感激。Thanks in advance:)
注意:我还需要自动更新已经索引的现有文档中的对象引用,当它们被修改时。
相关问题:https://groups.google.com/forum/#!主题/elasticsearch e3CelbOkgWk
我认为最简单的方法是使用cron作业或某种类型的同步应用程序。为什么?
- Elasticsearch计划弃用rivers
- 您可以完全控制可用的相关数据
- 你将能够使用复杂的查询来定义什么被索引(一个用户被更新?更新所有存储的数据)
相关文章:
- 如何使用object.assign()从其他对象引用基本对象属性
- 返回 JavaScript 类值而不是对象引用
- Facebook:当发布期望对象引用时显示打开的图形对话框
- Javascript-如何从字符串/对象引用回调
- 将其用于对象引用
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 将对象函数传递给请求动画帧时丢失对象引用
- JavaScript ecma6中的对象引用
- 在JSON中存储对象引用
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 对象引用的隐式传递是如何工作的
- 按对象的 ID 删除对选定对象的对象引用
- 在调用的函数中使用对象引用(this)
- 如何在testcomplete+js中获取对象引用
- 在Angularjs服务中为返回对象引用的http请求提供的数据构建简单的缓存
- JavaScript对象引用
- 对象引用未设置为行中的对象的实例,如果 (!string.IsNullOrEmpty(tdcd.文本)&&
- 如何在使用声明式 Dojo 时获取对象引用