gpt4 book ai didi

arrays - 检索仅包含事件用户 ID 的对象

转载 作者:行者123 更新时间:2023-12-02 23:16:35 27 4
gpt4 key购买 nike

dynamo db 和 Elasticsearch 仍然很新。

所以我有2张 table 。

表 1:包含我要显示的项目
表 2:包含具有带 bool 值的事件列的用户。 { active: true }
我想要做的是检索所有具有 active: true 的用户 ID ,然后从表 1 中检索包含所有这些 id 的对象。

第 1 步:找到活跃用户

let activeUsersResult = await es.search({
index: userTable, //table2
body: {
"query": {
"bool": {
"must":
{
"match": { "active": "true" }
}

}
}
}
})

这种工作。我的表包含 8 个活跃用户,但它只检索 7 个活跃用户。我打算联系 aws 支持以进行该修复,但 SO 的答案会很好,但不是这里的重点。

第 2 步:获取事件用户 ID
let activeIds = activeUsersResult.hits.hits.map( item => item._source.userId )

这给了我一个包含所有事件 id 的数组,它可能看起来像:
activeIds = ['id1', 'id2', 'id3', etc....]

第 3 步:从表 1 中获取仅包含那些 activeId 的 items 对象

注意:这个 es.search 也在执行搜索功能
let itemsResult = await es.search({
index: itemTable, //table 1
body:{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": e.searchQuery + "*",
"fields": ["item_name"]
}
},
{
"match": { "sold_out": "false" },
"match": { "userIds" : activeIds }
}
]
}
}
}
})

比赛线是我遇到问题的地方。 "match": { "userIds" : activeIds }
我需要一个只包含那些匹配的 activeId 的对象数组。我希望把这个打出来能给我一些想法,但我还是迷路了。

谢谢!

最佳答案

我建议你使用 termterms查询而不是匹配。当你需要匹配一个数组时,你应该使用 terms询问。因此,您的查询应如下所示。

{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": e.searchQuery + "*",
"fields": [
"item_name"
]
}
},
{
"term": {
"sold_out": "false"
}
},
{
"terms": {
"userIds": activeIds
}
}
]
}
}
}

阅读 termterms查询以了解有关它们如何工作的更多信息。

关于arrays - 检索仅包含事件用户 ID 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53860492/

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