node.js - 从JavaScript客户端查询字符串查询

标签 node.js elasticsearch elasticsearch-query

我正在使用Elasticsearch 5.5,我的查询是

client.search({
  index: 'sample',
  type: 'data',
  body: {
    "query": {
      "query_string": {
        "query": "state:req.params.state AND city:req.params.city AND postalcode:req.params.pc"
      }
    }
  }
}
})

在此代码中req.params.statereq.params.cityreq.params.pc是用户给定的值,这些值本身被视为value(string),并且不返回任何值,因为使用了双引号。

因此,当我尝试删除双引号时,未将使用的AND运算符验证为运算符并抛出错误。

最佳答案

好吧,您需要像这样以动态方式不同地构建查询。

const input = {
  'state': 'state',
  'city': 'city',
  'pc': 'postcode'
};
const query = [];
Object.keys(input).forEach(p => {
   if (req.params[p]) {
      query.push([input[p], req.params[p]].join(":"));
   }
});

client.search({
  index: 'sample',
  type: 'data',
  body:{
    "query":{
      "query_string": {
        "query": query.length ? query.join(" AND ") : "*"
      }
    }
  }
})

关于node.js - 从JavaScript客户端查询字符串查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62146597/

相关文章:

elasticsearch - 强制合并还是不强制合并,这是个问题

elasticsearch - 弹性云(kibana)中的默认用户名以及如何查找密码

elasticsearch - 如何从Elasticsearch中的过滤器获取所有文档?

node.js - 将对象放置到 mongoDb 中的根级别

node.js - 如何在 CentOS 上使用 Nginx 反向代理到域子文件夹中的 Node.js 应用程序?

node.js - 服务器发送事件未使用 React 和 NodeJs 从流中接收消息

elasticsearch - 如何在Elastic Search中增加具有动态属性的嵌套对象?

javascript - 为 Hubot 添加 Post 支持

ElasticSearch:Jest vs Rest vs TransportClient vs NodeClient

elasticsearch - 带过滤的Elasticsearch术语聚合