如何过滤弹性搜索查询

时间:2016-12-02 12:35:56

标签: node.js elasticsearch mongoose

这是我的node.js,mongoosastic搜索功能:

 exports.search = function (req, res) {
  if (!req.query.q) return res.status(400).send('No Query Provided')
  log.error(req.query.q)

  var query = {query_string: {query: req.query.q}};

  var filterDeleted = {
    term: {
      isDeleted: true
    }
  };

  User.search(query, {filter: filterDeleted}, (err, results) => {
    if (err) return handleError(res, err)
    var ret = _.map(results.hits.hits, result => ({
      userID: result._id,
      _score: result._score,
      name: result._source.name,
      loc: result._source.loc,
      info: result._source.info,
      images: result._source.images,
    }))
    return res.send(ret)
  })
}

通过这一切,我想问一下弹性“给所有用户匹配req.query.q,其中 isDelete属性为false(未删除)。 实际上这不起作用,据我所知,它忽略了过滤器并继续前进。所以它也显示了已删除的用户。 请有人帮我找到解决方案。

1 个答案:

答案 0 :(得分:0)

所以通过像这样修改代码来解决问题

exports.search = function (req, res) {

  if (!req.query.q) return res.status(400).send('No Query Provided')
  log.error(req.query.q)
  User.search({query_string: {query: req.query.q}}, (err, results) => {
    if (err) return handleError(res, err)
    var ret = _.map(results.hits.hits, result => ({
      userID: result._id,
      _score: result._score,
      name: result._source.name,
      loc: result._source.loc,
      info: result._source.info,
      images: result._source.images
    }))
    return res.send(ret)
  })
}