Elasticsearch/OpenSearch如何结合geo_distance实现多字段过滤
实现方法
Elasticsearch/OpenSearch的bool.filter节点支持传入数组格式的多个过滤条件,所有条件为逻辑与关系,即必须同时满足才会返回对应文档。你只需要把原有单个geo_distance条件和新增的deposit过滤条件一起放到filter数组中,就能在保留原有5公里地理范围过滤的基础上,叠加押金字段的筛选规则。
场景1:精确匹配deposit字段值
如果需要筛选指定押金值的司机(比如押金为1500),直接使用term查询做精确匹配即可,完整查询如下:
{ "query": { "bool": { "filter": [ { "geo_distance": { "distance": "5km", "coordinate": { "lat": 3.131779652034938, "lon": 101.6846340901202 } } }, { "term": { "deposit": "1500" } } ] } } }
场景2:按deposit数值范围过滤
如果需要按押金区间筛选(比如押金大于等于1000、小于2000),使用range查询即可。需要注意你当前索引中deposit是字符串类型存储的数值,字符串比较遵循字典序规则,如果数值长度不统一会出现结果不符合预期的问题,长期使用建议将该字段的映射修改为integer/long数值类型。范围过滤的示例查询如下:
{ "query": { "bool": { "filter": [ { "geo_distance": { "distance": "5km", "coordinate": { "lat": 3.131779652034938, "lon": 101.6846340901202 } } }, { "range": { "deposit": { "gte": "1000", "lt": "2000" } } } ] } } }
内容的提问来源于stack exchange,提问作者Varma
相关产品推荐
相关产品推荐

