我正在使用ES 5.5,并且像这样使用javasript API请求查询dsl
client.search({
index: 'demo',
type: 'sample',
body: {
"query": {
"bool": {
"must": [
{
"match": {
"CityName": {
query: req.params.city,
slop: 100
}
}
},
{
"match": {
"StateName": {
query: req.params.state,
slop: 100
}
},
{
"match": {
"Code": {
query: req.params.code,
slop: 100
}
}
}
]
}
}
}
})
当用户提供所有三个值时,该查询工作正常,但是在我的情况下,这三个参数不是强制性的,每个用户都可以给出一个值或多个值,并且给定字段
must match
文档。使用一个或两个值进行搜索不会返回任何东西。
最佳答案
您需要将must
替换为should
。有关更多详细信息,请引用boolean query
client.search({
index: 'demo',
type: 'sample',
body: {
"query": {
"bool": {
"must": [ --> replace this `must` with `should`
{
"match": {
"CityName": {
query: req.params.city,
slop: 100
}
}
},
{
"match": {
"StateName": {
query: req.params.state,
slop: 100
}
},
{
"match": {
"Code": {
query: req.params.code,
slop: 100
}
}
}
]
}
}
}
})
关于elasticsearch - 在Elasticsearch中处理可选字段搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62145481/