首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用KeystoneJS分页技术实现猫鼬全文搜索

用KeystoneJS分页技术实现猫鼬全文搜索
EN

Stack Overflow用户
提问于 2017-09-05 16:31:06
回答 2查看 893关注 0票数 2

我有从Keystone模型返回结果的全文搜索。问题是我正在使用model.find()生成这些结果。我想对这些结果进行分页,但是我找不到一种将$text.paginate()结合使用的方法。是否有一种方法将猫鼬全文搜索与Keystone分页结合起来,或者甚至将model.find()的分页结果进行分页?

编辑

我已经厌倦了使用keystone.list('List').paginate().find(),但是我收到了一个错误:“回调不是一个函数。”也许我的代码还有其他问题:

代码语言:javascript
复制
keystone.list('Document').paginate({
  page: req.query.page || 1,
  perPage: 10,
  maxPages: 6,
})
.find(
  { $text : { $search : req.query.search } },
  { score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
  locals.documents = results;
  next();
});
EN

回答 2

Stack Overflow用户

发布于 2019-02-10 09:56:21

我就是这样做过滤器的。重点石板。下面是我的待办事项模型

代码语言:javascript
复制
import keystone from 'keystone';

const { Field: { Types } } = keystone;

const Todo = new keystone.List('Todo');

Todo.add({
   title: {
   type: String, required: true, default: Date.now,
 },
 description: { type: Types.Html, wysiwyg: true },
 createdAt: { type: Date, default: Date.now },
});

Todo.relationship({ path: 'users', ref: 'User', refPath: 'todos' });
Todo.schema.index({ title: 'text' });
Todo.register();

export default Todo;

和分页过滤器

代码语言:javascript
复制
export const list = (req, res) => {
const search = new RegExp(req.query.search || '', 'i');
const query = {
  title: search,
};
Todo.paginate({
   page: req.query.page || 1,
   perPage: 5,
   maxPages: 10,
   filters: {
     $or: [query],
   },
 }).sort('-createdAt').exec((err, items) => {
 if (err) return res.status(500).json(err);

   return res.json({
     data: items,
   });
 });
};
票数 2
EN

Stack Overflow用户

发布于 2018-07-19 04:36:19

您可以使用这样的过滤器:

代码语言:javascript
复制
keystone.list('Document').paginate({
    page: req.query.page || 1,
    perPage: 10,
    maxPages: 6,
    filters: {
        $text: {
            $search: req.query.search || ''
        },
    },
    optionalExpression: {
        score: {$meta: "textScore"}
    },
})
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
    locals.documents = results;
    next();
});

paginate函数将把它传递给find函数。看这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46059600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档