【发布时间】:2017-03-03 00:55:42
【问题描述】:
我在 typescript 中有一个函数,它以弹性搜索查询的形式将对象写入我的 firebase 的“搜索/请求”路径。
在 Heroku 上运行 flashlight 的脚本会读取 firebase 中的“search/request/XYZ”对象,然后在执行搜索后创建“search/response/XYZ”对象。
在我的应用中,以下 sn-p 可以正常工作:
let queryBody: Object = {
index: 'firebase',
type: 'vehicle',
query: { match_all: {} },
size: 4
}
this.requestKey = this._allSearchRequest$.push(queryBody).key
执行时,firebase 中的响应对象正确指示“97 个命中”并显示其中的前 4 个。
但是,我无法执行更复杂的查询。我尝试执行以下 sn-p,尝试根据车辆的 vin 属性匹配所有车辆:
let queryBody: Object = {
index: 'firebase',
type: 'vehicle',
query: { match: {vin: '*'} },
size: 4
}
this.requestKey = this._allSearchRequest$.push(queryBody).key
但是当我这样做时,我收到以下错误,“搜索必须包含字符串或对象”。
elasticsearch 的文档是用 javascript 编写的,所有键都使用双引号。 Typescript 不使用该语法。我怀疑将 typescript 对象转换为 javascript 到 json 可能存在问题。
我调试的下一步将是尝试使用 ElasticSearch 文档指定的确切格式创建显式 JSON 对象。
在此期间任何想法都会有所帮助。
【问题讨论】:
-
我向你保证,它与 TypeScript 无关。顺便说一句,它完全支持双引号键和所有其他 JavaScript 语法。你忘了打电话给
JSON.stringify吗? -
顺便说一句,只能使用序列化程序或使用字符串操作手动创建 JSON 对象。这是因为 JSON 是一种文本数据交换格式,而不是内存对象模型。在 JavaScript 中,所有 JSON 值都是字符串类型的成员。
-
您需要在此处使用
q或body而不是query。如前所述,这与打字稿无关,与不喜欢您的查询语法的节点的 ES 库有关。 -
@Kato,为什么
q或body比query更受欢迎?
标签: angular typescript elasticsearch firebase firebase-realtime-database