Elasticsearch与MongoDB和ExpressJS的分页

时间:2015-02-25 09:32:21

标签: javascript node.js mongodb express elasticsearch

我尝试在线搜索解决方案,但说实话,我仍然没有找到任何可以帮助我实现这一目标的方法。

这是我第一次使用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
      });
    });
};

我真的不知道将sizefrom放在哪里......在理解了这一点后,我也想知道如果可能的话,如何实施无限滚动...以及如何处理分页的链接...即:prev, 1, 2, 3, 4, ..., next

视图有一个简单的搜索输入文本,在按下提交后打开一个包含hits列表的新页面,所以它应该没什么复杂的......

我希望你能提供帮助。感谢

1 个答案:

答案 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)。您必须使用前端来获取大小来自参数所需的值。