简体   繁体   English

如何过滤弹性搜索查询

[英]How to filter elastic search query

This is my node.js, mongoosastic search function: 这是我的node.js,Monososastic搜索功能:

 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)
  })
}

By all this I want to ask elastics "give all users matching to req.query.q, whose isDelete property is false(which are not deleted). Actually this does not work, and as I understand, it ignores the filter and goes forward. So it displays the deleted users too. Please someone help me find the solution. 通过所有这些,我想问一个“将所有与req.query.q匹配的用户,其isDelete属性为false(不会删除)。实际上这是行不通的,而且据我了解,它会忽略过滤器并继续前进。因此,它也显示已删除的用户。请有人帮助我找到解决方案。

So the problem solved by modifying the code like this 所以通过修改这样的代码解决了问题

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)
  })
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM