如何实现MongoDB全文搜索分页?

Ade*_*lin 7 java mongodb

现在我的搜索查询返回了100多个文档,如何为所有返回的文档实现分页?有没有办法用mongoDB实现它,或者我必须获取服务器内存中的所有结果并实现分页(这似乎不合理).请注意,返回的CommandResult不是DBCursor!

    DBObject searchCommand = new BasicDBObject();
    searchCommand.put("text", collectionName);
    searchCommand.put("search", searchQuery);

    CommandResult commandResult = db.command(searchCommand);
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是Java.

Ste*_*nie 7

text搜索命令没有skip选择,因为在MongoDB的2.4,所以任何分页将在应用程序代码中实现.

如果您考虑文本搜索的行为(即返回基于相关性排名的结果),则skip选项仍然必须缓存或计算要跳过的初始结果.

效率

就您的应用程序中的高效分页而言,一些建议是:

  • 缓存初始搜索的结果和切片页面大小的子集,供应用程序呈现
  • 使用客户端插件,它在一个很好的分页视图中显示单个查询的结果(例如使用jQuery DataTables插件)

限制返回的结果数

limit文本搜索的默认值是返回最多100个结果.您可以增加限制,但请记住,整个结果文档仍必须符合MongoDB服务器支持的最大BSON文档大小(16Mb,如MongoDB 2.4).同样值得考虑的是,大多数用户在搜索结果页面时都有一定的耐心,因此如果您有几百个结果,最好建议改进搜索条件.

其他选择

如果你已经超出了MongoDB 2.4文本搜索的当前限制(顺便提一下,它仍然被认为是"实验性的"),你可以随时升级到更全功能的搜索产品,如ElasticSearchApache Lucene.有一些方法可以将MongoDB数据更新提供给外部搜索产品,例如使用ElasticSearch River插件Mongo Connector.

  • 此问题也发布在[mongodb-user讨论组](https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/cyNj-jlAynk)上.如上所述,[SERVER-9063](https://jira.mongodb.org/browse/SERVER-9063)是您应该投票和观看的相关功能请求.建议使用全文搜索作为过滤器,并允许按分数以外的标准排序. (3认同)