我正在使用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.state
,req.params.city
和req.params.pc
是用户给定的值,这些值本身被视为value(string),并且由于使用双引号而不返回任何内容。
因此,当我尝试删除双引号时,未将使用的AND运算符验证为运算符并抛出错误。
答案 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 ") : "*"
}
}
}
})