我的弹性搜索/节点/快递应用程序遇到问题。 elasticsearch返回的结果采用以下格式。
[{
_index:"football",
_type:"palyer",
_source:{
name:"Paul Pogba",
jerseyNumber:14,
shortName:"Norwich"
}
}]
[{
_index:"football",
_type:"team",
_source:{
name:"Norwich",
shortName:"Norwich"
}
}]
我主要关注的是提供综合搜索结果。当我搜索一个俱乐部/团队(例如:曼彻斯特)时,它应该返回所有带有搜索词的俱乐部(已完成)。此外,我计划通过搜索团队的shortName来找到团队成员。当我在团队搜索中只返回一个结果时,我可以这样做。当两个或多个结果调用时,由于JS的异步性质,所有这些结果都无法搜索。我正在研究承诺和表达承诺的路由器,并且无法提出可能的解决方案。我有两个独立的函数searchTeam和searchPlayer,它们接受searchTerm并通过回调函数返回结果。
搜索播放器功能
module.exports.searchPlayers = function(searchData, callback) {
client.search({
//elasticsearch query
}).then(function (resp) {
callback(resp.hits.hits);
}, function (err) {
callback(err.message)
console.log(err.message);
});
}
在ejs中调用搜索
<form action='/search/search-players' method='post'>
<input type="text" name="searchTerm" placeholder="your search term here">
<button type="submit"> SEARCH </button>
</form>
路线
router.post('/search/search-players', function(req, res) {
searchModulePlayers.searchPlayers(req.body, function(data) {
res.render('search', { title: 'Players', resultsP: data });
});
});
由于我的搜索功能仅接受一个术语,如何将所有搜索结果都添加到数组中,以便我可以使用ejs在一个页面中呈现它们。我之前发布了类似的问题q1。由于我无法得到一个正确的答案,我再次以不同的角度问。