从JavaScript客户端查询字符串查询

时间:2020-06-02 07:06:28

标签: 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运算符验证为运算符并抛出错误。

1 个答案:

答案 0 :(得分:0)

嗯,您需要像这样动态地构建查询。

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 ") : "*"
      }
    }
  }
})