【问题标题】:Elasticsearch pagination with MongoDB and ExpressJS使用 MongoDB 和 ExpressJS 进行 Elasticsearch 分页
【发布时间】:2015-04-27 05:40:08
【问题描述】:

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

这是我第一次使用 ElasticSearch,而且我对 Node 和 MongoDB 也很陌生。

所以,我按照一种教程,从 NPM 实现了 Mongooastic,让 ElasticSearch 与 Node 一起工作。

即使对总共 12 个用户进行索引,它似乎也能正常工作,如果我在搜索列表视图中输入搜索“用户”,我可以找到 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列表的新页面,所以应该没什么复杂的......

希望你能帮上忙。谢谢

【问题讨论】:

    标签: javascript node.js mongodb express elasticsearch


    【解决方案1】:

    默认情况下,elasticsearch 返回前 10 个结果:如果需要更多,则必须设置 size 参数。

    另外,为了添加 sizefrom 参数,您需要这样编写查询:

    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 到用户 n°60(更多信息:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html)。您必须使用前端来获取 sizefrom 参数所需的值。

    【讨论】:

    • 太棒了!你知道它是否也可以以某种方式无限滚动?
    • 对不起,我现在试过了,它根本不起作用。我收到以下错误:All shards failed for phase: [query]
    • 奇怪...你能把整个错误信息粘贴到这里吗?
    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 2011-01-04
    • 2017-11-19
    • 2018-05-13
    • 2018-06-26
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多