Все еще очень плохо знакомы с Dynamo DB и эластичным поиском.
Итак, у меня есть 2 таблицы.
Таблица 1: Содержит элементы, которые я хочу отобразить Таблица 2: Содержит пользователей с активнымстолбец с логическим значением.{ active: true }
Я хочу получить все идентификаторы пользователей, которые имеют active: true
, а затем извлечь объект из таблицы 1, содержащей все эти идентификаторы.
Шаг 1: Найти активных пользователей
let activeUsersResult = await es.search({
index: userTable, //table2
body: {
"query": {
"bool": {
"must":
{
"match": { "active": "true" }
}
}
}
}
})
Этот вид работал.Моя таблица содержит 8 активных пользователей, но она получает только 7 активных пользователей.Я собирался обратиться в службу поддержки aws для этого исправления, но от SO было бы неплохо получить ответ, но не фокус здесь.
Шаг 2: Получить идентификаторы активного пользователя
let activeIds = activeUsersResult.hits.hits.map( item => item._source.userId )
Какиедает мне массив всех активных идентификаторов, который может выглядеть следующим образом:
activeIds = ['id1', 'id2', 'id3', etc....]
Шаг 3: Получить объект items, содержащий только эти активные идентификаторы из таблицы 1
Примечание. Этот 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 }
Мне нужен массив объектов, которые содержат только те, которые соответствуют activeIds.Я надеялся, что это даст мне идеи, но я все еще потерялся.
Спасибо!