2017-08-17 114 views
0

我想使用下面的查询搜索多个单词。当我搜索“文件的角色:”我应该得到有所有文档和使用sequelize搜索多个单词uisng postgres和javascript

function searchDocuments(req, res) { 
    const limit = req.query.limit || 6, 
    offset = req.query.offset || 0, 
    queryString = req.query.q, 
    splitString = queryString.split(' '); 
    let querySearch = ''; 

    splitString.forEach((query, index, initial) => { 
    console.log(initial[index]); 
    }); 


    if (!queryString) { 
    return res.status(400).json({ 
     message: 'Invalid search input' 
    }); 
    } 
    if (req.decoded.roleId === 1) { 
    return Document.findAndCountAll({ 
    limit, 
     offset, 
     where: { 
     title: { 
      $iLike: `%${querySearch}%` 
     } 
     }, 
     include: [ 
     { 
      model: User, 
      attributes: ['userName', 'roleId'] 
     } 
     ] 
    }) 
    .then(({ rows: document, count }) => { 
     if (count === 0) { 
     return res.status(404).json({ 
      message: 'Search term does not match any document.' 
     }); 
     } 
     res.status(200).send({ 
     document, 
     pagination: pagination(count, limit, offset), 
     }); 
    }) 
    .catch(error => res.status(400).send(error)); 

我只是想执行做一个或任务用的关键字sequelize查询中有角色的所有文档中的所有文件标题

+0

你看看postgresql的全文搜索功能吗? – Aparichith

+0

是的,我已经得到了一个修复 – Iakhator

回答

0

从顶部添加以下代码:

const limit = req.query.limit || 6, 
    offset = req.query.offset || 0, 
    queryString = req.query.q.replace(/ +(?=)/g, ''), 
    searchQuery = []; 

    if (!queryString) { 
    return res.status(400).json({ 
     message: 'Invalid search input' 
    }); 
    } 

    if (req.decoded.roleId === 1) { 
    const splitString = queryString.trim().split(' '); 

    splitString.forEach((query) => { 
     const output = { $iLike: `%${query}%` }; 
     searchQuery.push(output); 
    }); 

然后添加下面的你在哪里查询searchQuery

 where: { 
     title: { 
      $or: searchQuery 
     } 
     }