对dynamo db和elastic search来说还是很新的。
所以我有两张table。
表1:包含要显示的项表2:包含具有布尔值的活动列的用户。 { active: true }
我要做的是检索所有具有 active: true
,然后从表1中检索包含所有这些ID的对象。
第一步:找到活跃用户
let activeUsersResult = await es.search({
index: userTable, //table2
body: {
"query": {
"bool": {
"must":
{
"match": { "active": "true" }
}
}
}
}
})
这种方法奏效了。我的表包含8个活动用户,但它仅检索7个活动用户。我本来想联系aws的支持人员来解决这个问题的,但是如果是这样的话答案会很好,但不是这里的重点。
步骤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的对象数组。我本来希望打出来能给我一些想法,但我还是迷路了。
谢谢!
1条答案
按热度按时间l7wslrjt1#
我建议你用
term
以及terms
查询而不是匹配。当需要与数组匹配时,应该使用terms
查询。所以您的查询应该如下所示。阅读“关于术语”和“术语查询”,了解它们的工作原理。