gpt4 book ai didi

json - 无法使用 Firebase 和 ElasticSearch(使用 Flashlight)进行正确的路径监控或查询

转载 作者:IT老高 更新时间:2023-10-28 23:17:06 29 4
gpt4 key购买 nike

我正在尝试将 ElasticSearch 与 Firebase 集成。我正在使用 Flashlight integration从 Firebase 进行设置。我已按照上面链接的 Github 存储库中的描述将代码部署到 Heroku。

从某种意义上说,当我将查询对象插入 /search/request/ 时,我会得到 /search/response 结果。但是结果有点乱,不正确。但我不知道出了什么问题。

这是在 config.js 中定义的,我在其中定义了要监控的路径:

/** Paths to Monitor
*
* Each path can have these keys:
* {string} path: [required] the Firebase path to be monitored, for example, `users/profiles`
* would monitor https://<instance>.firebaseio.com/users/profiles
* {string} index: [required] the name of the ES index to write data into
* {string} type: [required] name of the ES object type this document will be stored as
* {Array} fields: list of fields to be monitored and indexed (defaults to all fields, ignored if "parser" is specified)
* {Array} omit: list of fields that should not be indexed in ES (ignored if "parser" is specified)
* {Function} filter: if provided, only records that return true are indexed
* {Function} parser: if provided, the results of this function are passed to ES, rather than the raw data (fields is ignored if this is used)
*
* To store your paths dynamically, rather than specifying them all here, you can store them in Firebase.
* Format each path object with the same keys described above, and store the array of paths at whatever
* location you specified in the FB_PATHS variable. Be sure to restrict that data in your Security Rules.
****************************************************/

exports.paths = [{
path: "users",
index: "firebase",
type: "user"
}, {
path: "messages",
index: "firebase",
type: "message",
fields: ['msg', 'name'],
filter: function(data) {
return data.name !== 'system';
}
}];

这是 Firebase 中用户 Node 的结构(位于根目录)。

"users" : {
"userid123" : {
"friends" : {
"userid42" : 1
},
"recs" : {
"-recid1234" : 0
},
"user_info" : {
"createdAt" : 1475157596,
"email" : "e@male.org",
"name" : "Firstname Lastname Johnson",
"profilePicture" : "png.jpg",
"pushId" : {
},
"username" : "userLooser"
}
},
"userid42" : {
"friends" : {
"userid123" : 1,
"test1" : 1
},
"recs" : {
"-recid5678" : 0
},
"user_info" : {
"email" : "email@icloud.com",
"name" : "Firstname Lastname",
"phoneNumber" : "",
"profilePicture" : "jpg.png",
"pushId" : {

},
"username" : "userName"
}
}
}
}

我想要实现的是搜索用户名,并返回排名靠前的结果。我真正需要的只是用户名和用户 ID。

Image of firebase search query

但是当我使用上图中的对象进行查询时,我得到了下面的响应:

  "search" : {
"response" : {
"index" : {
".priority" : 1.477326417519E12,
"hits" : [ {
"_id" : "test1",
"_index" : "firebase",
"_score" : 1,
"_source" : {
"friends" : {
"test1" : 1
},
"recs" : {
},
"user_info" : {
"createdAt" : 1475157596,
"name" : "Testbruker 1",
"username" : "testuzer"
}
},
"_type" : "user"
}, {
"_id" : "userid123",
"_index" : "firebase",
"_score" : 1,
"_source" : {
"friends" : {
},
"recs" : {

},
"user_info" : {
"email" : "",
"name" : "Firstname Lastname",
"phoneNumber" : "",
"profilePicture" : "",
"pushId" : {
},
"username" : "profileName"
}
},
"_type" : "user"
}, {
"_id" : "userid42",
"_index" : "firebase",
"_score" : 1,
"_source" : {
"friends" : {
},
"recs" : {

},
"user_info" : {
"createdAt" : 1475157596,
"email" : "e@male.org",
"name" : "Firstname Lastname Johnson",
"profilePicture" : "",
"pushId" : {
},
"username" : "userLooser"
}
},
"_type" : "user"
} ],
"max_score" : 1,
"total" : 3
},
"query" : {
".priority" : 1.477326417484E12,
"hits" : [ {
"_id" : "test1",
"_index" : "firebase",
"_score" : 1,
"_source" : {
"friends" : {
"test1" : 1
},
"recs" : {
},
"user_info" : {
"createdAt" : 1475157596,
"name" : "Testbruker 1",
"username" : "testuzer"
}
},
"_type" : "user"
}, {
"_id" : "userid42",
"_index" : "firebase",
"_score" : 1,
"_source" : {
"friends" : {

},
"recs" : {

},
"user_info" : {
"email" : "",
"name" : "Firstname Lastname",
"phoneNumber" : "",
"profilePicture" : "",
"pushId" : {

},
"username" : "profileName"
}
},
"_type" : "user"
}, {
"_id" : "userid123",
"_index" : "firebase",
"_score" : 1,
"_source" : {
"friends" : {
},
"recs" : {

},
"user_info" : {
"createdAt" : 1475157596,
"email" : "e@male.org",
"name" : "Firstname Lastname Johnson",
"profilePicture" : "",
"pushId" : {

},
"username" : "userLooser"
}
},
"_type" : "user"
} ],
"max_score" : 1,
"total" : 3
},
"type" : {
".priority" : 1.477326417503E12,
"hits" : [ {
"_id" : "test1",
"_index" : "firebase",
"_score" : 1,
"_source" : {
"friends" : {
"test1" : 1
},
"recs" : {
},
"user_info" : {
"createdAt" : 1475157596,
"name" : "Testbruker 1",
"username" : "testuzer"
}
},
"_type" : "user"
}, {
"_id" : "userid42",
// Same content as above
}, {
"_id" : "userid123",
// Same content as above
} ],
"max_score" : 1,
"total" : 3
}
}
}

其中:

  • A) 不返回正确的排序。第一个结果与我的搜索查询完全不匹配,看起来它以随机顺序返回所有用户。
  • B) 回复真是乱七八糟。在 /response 下有三个 Node querytypeindex 都包含很多命中。

那么,有谁知道怎么回事?如何创建查询或制作路径监视器以使搜索正常工作?也许得到一个更简单的回应?

最佳答案

Flashlight 实际上在 search/requests/$key 中查找请求,其中应该包含一个包含字段类型、索引、查询的文档。它会在 search/response/$key 处对结果做出响应。如果您想通过手动添加 key 进行测试,请尝试将请求放在另一个 Node 下,例如搜索/请求/testkey123。

关于json - 无法使用 Firebase 和 ElasticSearch(使用 Flashlight)进行正确的路径监控或查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223633/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com