You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache Solr中提升250km地理范围内的结果且保留其他结果

Solr实现指定范围内文档平等权重提升方案

问题原因分析

你之前的尝试无效主要是两个原因:

  • geofilt是过滤查询解析器,仅用于过滤文档,无法作为匹配条件放到bq(Boost Query)中实现权重提升;
  • 之前使用dist函数时参数错误,且未正确利用Solr针对空间字段的geodist函数,导致距离计算逻辑失效。

有效解决方案

以下三种方法均可实现250km内文档平等权重提升(非递减),其他文档正常展示但排在后面:

方法一:使用bq结合frange与geodist

通过frange函数匹配距离在0-250km内的文档,再通过bq给这类文档添加额外权重:

bq={!frange l=0 u=250}geodist(latlon, 18.5204303, 73.8567437)^1.5
  • geodist(latlon, 纬度, 经度):计算文档latlon字段到指定坐标的距离(单位取决于字段配置,通常为km);
  • frange l=0 u=250:筛选距离在0到250km之间的文档;
  • ^1.5:给匹配到的文档增加1.5倍权重。

方法二:使用boost参数结合map函数

通过map函数判断距离范围,直接给符合条件的文档设置权重乘数:

boost=map(geodist(latlon, 18.5204303, 73.8567437), 0, 250, 2, 1)
  • 逻辑:当距离在0-250km内时,权重乘以2;否则乘以1(无额外提升);
  • map(值, 最小值, 最大值, 符合条件返回值, 不符合返回值)是Solr的函数语法。

方法三:使用boost参数结合if与le函数

用更直观的条件判断实现权重控制:

boost=if(le(geodist(latlon, 18.5204303, 73.8567437), 250), 2, 1)
  • le(值, 阈值):判断值是否小于等于阈值;
  • if(条件, 符合返回值, 不符合返回值):根据条件返回对应的权重乘数。

前置注意事项

确保你的latlon字段是Solr支持的空间字段类型(如SpatialRecursivePrefixTreeFieldType,通常在schema中配置为location_rpt),否则geodist函数无法正常计算距离。

内容的提问来源于stack exchange,提问作者Sumit Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:50:16