【问题标题】:How to filter elastic search query如何过滤弹性搜索查询
【发布时间】:2017-03-24 17:38:16
【问题描述】:

这是我的 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)
  })
}

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

【问题讨论】:

  • 可以发布生成的 JSON 请求吗?
  • 对不起,但不应该在代码isDeleted=false
  • 先生。当然,我尊重您的意见,但是如果我想过滤所有已删除的用户,而不是通过响应发送。
  • 虽然我也尝试过相反的方法,但还是一样(不起作用)。
  • 也许尝试将过滤器嵌套在query 正文的inside 中,如here

标签: node.js elasticsearch mongoose


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2016-08-28
    • 2016-03-02
    相关资源
    最近更新 更多