我正在使用 SOLR 进行一些数据分析,但我被困在一个可能为我提供一些巨大价值的部分。
我有一个 solr 集合,其中包含许多范围的数字字段,例如:
pr_high_max = 10.35
pr_high_min = 8.15
pr_med_max = 12.55
pr_med_min = 10.40
每个最小/最大组合提供一个价格范围,高/中部分是由当前组中的项目数量按该范围得出的,我不打算讨论一些时髦的数学。
我需要用商品价格查询 solr 并取回一个价格在某个范围内的文档,我需要能够为其分配权重,以便高字段优先于 med 字段。这本质上是一个反向 RANGE 搜索。
我正在查询其他字段,所以这应该包含在权重中,这也不能在 fq 中,因为如果项目不符合这个条件,那么它可能会匹配其他字段。
到目前为止,我能够组装这个函数查询:
prboost:sum(
if(and(query({!edismax v='pr_high_max:[8 TO *]' }),query({!edismax v='pr_high_min:[* TO 8]'})),5,0),
if(and(query({!edismax v='pr_med_max:[8 TO *]' }),query({!edismax v='pr_med_min:[* TO 8]'})),3,0),
if(and(query({!edismax v='pr_low_max:[8 TO *]' }),query({!edismax v='pr_low_min:[* TO 8]'})),1,0),
)
其中 8 是我将传递的价格,基本上这是检查价格是否在任何范围内,如果是,我将返回一个值,5 表示高,3 表示中,1 表示低. 理想情况下,我想将其包含在常规权重中,但我无法将其添加为子查询。此外,如果我尝试增强它,我会返回“无限递归检测到解析查询'pr_high_max:[8 TO *]'”
有没有人遇到过这样的事情?有任何想法吗?
此外,我可以控制正在进行的数据,因此如果这会使解析更容易,我可以轻松地对其进行按摩以以不同的方式表示范围。
提前致谢