我将传递以下三个参数来运行查询,它们是:
- 查询 - 地名、描述或空,
- lat - 某个地方或空旷地方的纬度,
- lon - 某个地方的经度或空的经度
根据上述参数,我可以根据query
分数查询items
列表,然后计算结果
与之间的距离>纬度、经度
。
现在,我有以下脚本来根据查询
和距离
获取项目
;
{
"query": {
"function_score": {
"query": {
"bool": {
"must": [{
"multi_match" : {
"query": "Lippo",
"fields": [ "name^6", "city^5", "country^4", "position^3", "address_line^2", "description"]
}
}]
}
},
"functions": [
{
"gauss": {
"position": {
"origin": "-6.184652, 106.7518749",
"offset": "2km",
"scale": "10km",
"decay": 0.33
}
}
}
]
}
}
}
但问题是,如果 query
为空,则根本不会有结果。我想要的是,结果基于查询
或距离
。
有什么办法可以实现这个目标吗?如有任何建议,我们将不胜感激。
最佳答案
设置 zero_terms_query多重匹配选项 all
应该允许您在查询为空时获得结果。
示例:
{
"query": {
"function_score": {
"query": {
"bool": {
"must": [{
"multi_match" : {
"query": "Lippo",
"fields": [ "name^6", "city^5", "country^4", "position^3", "address_line^2", "description"],
"zero_terms_query" : "all"
}
}]
}
},
"functions": [
{
"gauss": {
"position": {
"origin": "-6.184652, 106.7518749",
"offset": "2km",
"scale": "10km",
"decay": 0.33
}
}
}
]
}
}
}
关于elasticsearch - Elasticsearch如何查询多重匹配或函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38071367/