查询函数结果的Solr分面

jk9hmnmh  于 2022-12-12  发布在  Solr
关注(0)|答案(1)|浏览(179)

是否可以为查询函数的结果字段生成solr面?
我有一个产品索引,每个商店都有一个价格字段:

{
    "id" : "p1",
    "name_s" : "Product 1",
    "description_s" : "The first product",
    "price_l1_d" : 19.99,
    "price_l2_d" : 20.00,
    "price_l3_d" : 20.99,
    "price_l4_d" : 19.99,
    "price_l5_d" : 25.00,
    "price_l6_d" : 18.00
},
{
    "id" : "p2",
    "name_s" : "Product 2",
    "description_s" : "The second product",
    "price_l1_d" : 12.99,
    "price_l2_d" : 15.00,
    "price_l3_d" : 13.49,
    "price_l4_d" : 14.00,
    "price_l5_d" : 12.50,
    "price_l6_d" : 16.00
}

并且我需要查询返回客户最近的3家商店中的最便宜价格。
我知道我可以使用fl=min(price_l2_d, price_l4_d, price_l6_d)返回这个值,甚至可以对此进行排序,但是是否可以根据每个文档的这个值返回一个“价格”方面?理想情况下,我希望能够显示最低价格(在我的3个商店中)在0-5、5-10、10-15、15-20等之间的所有产品,并对此进行过滤。
我试过将min(price_l2_d, price_l4_d, price_l6_d)当作facet.field使用,但收到未定义字段的错误。有更好的方法吗?
我不能在索引时间产生这个值,因为最近的3家商店可能是三个价格字段的任意组合(在本例中有6个,但它们可能超过200个)

rbl8hiat

rbl8hiat1#

虽然不是解决方案,但我找到了一个可行的解决方案。不幸的是,不能像使用单个整数属性那样为价格范围创建传统的方面,但可以使用两点滑块。
使用JSON面API(如原始问题的注解所建议)和以下内容:

{
  "max" : "max(min(price_l2_d, price_l4_d, price_l6_d))",
  "min" : "min(min(price_l2_d, price_l4_d, price_l6_d))"
}

我可以返回滑块的边界,其中包含三家商店的最小最低价格和最大最低价格。
然后可以使用{!frange}函数应用此滑块上的值,如下所示:
fq={!frange l=0 u=20}min(price_l2_d, price_l4_d, price_l6_d)
其中l是下限,u是上限
希望这能帮助其他寻找答案的人。

相关问题