我尝试在线搜索解决方案,但说实话,我仍然没有找到任何可以帮助我实现这一目标的方法。
这是我第一次使用ElasticSearch,而且我对Node和MongoDB也很陌生。
所以,我遵循了一种教程并从NPM实现了Mongooastic,让ElasticSearch与Node一起工作。
即使总共有12个用户编入索引,如果我输入搜索" user"在搜索列表视图中,我可以找到12条记录,每条记录显示10条记录,第一条记录缺少值...
但对我而言,主要的问题是分页......或者某种......在它上面实现无限滚动也会很好但我真的不知道如何处理它。
所以,目前处理它的控制器如下:
exports.searchUsers = function(req, res) {
User.search({
query_string: {
query: req.query.q
}
},
{ hydrate: true },
function(err, results) {
if (err) res.send(err);
res.render('search-results', {
results: results,
users: results.hits.hits
});
});
};
我真的不知道将size
和from
放在哪里......在理解了这一点后,我也想知道如果可能的话,如何实施无限滚动...以及如何处理分页的链接...即:prev, 1, 2, 3, 4, ..., next
视图有一个简单的搜索输入文本,在按下提交后打开一个包含hits
列表的新页面,所以它应该没什么复杂的......
我希望你能提供帮助。感谢
答案 0 :(得分:2)
默认情况下,elasticsearch会返回10个第一个结果:如果您需要更多,则必须设置尺寸参数。
此外,为了添加大小和来自参数,您需要像这样编写查询:
User.search({
query: {
query_string: {
query: req.query.q
}
},
size: 30,
from: 30
},
{hydrate: true},
function (err, results) {
if (err) res.send(err);
res.render('search-results', {
results: results,
users: results.hits.hits
});
});
(见这里:https://github.com/taterbase/mongoosastic/issues/123)
这将为您的用户提供n°30至用户编号60(此处有更多信息:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html)。您必须使用前端来获取大小和来自参数所需的值。