我正在为电子商务网站开展Solr集成。我想提供一个jQuery Slide Range UI(参考http://jqueryui.com/slider/#range)。
因此,访问者将获得一个页面上具有最小和最大价格的滑块,用于定义范围并相应地应用过滤器。
在Solr方面,我了解如何对此进行范围过滤查询。
然而,为了显示范围,我需要最小和最大价格值。我不知道如何从索尔获得这个。
此外,当其他方面被过滤时,我需要改变这个min&最高价格。但我无法思考Solr如何做到这一点。 solr是否提供min&同一查询中的最高价格值?
怎么做?
或者使用Solr实现此目的的最佳实践是什么?
答案 0 :(得分:3)
我相信你已经获得了当前数据集的方面值, 因此,对于您的范围问题,您必须在客户端对facet值进行排序并提供min&滑块的最大值。
这样它也可以解决您的其他问题,因为应用了过滤器后,返回的构面值也会发生变化。
此外,如果facet没有返回任何内容,您可以添加额外的检查以不显示滑块。
对于大数据范围,我认为您可以使用solr stats
例如:
http://localhost:8983/solr/select?q=*:*&stats=true&stats.field=price&rows=0&indent=on
答案 1 :(得分:1)
使用SOLR的stats
,将stats参数传递给您的SOLR查询,此处我在统计字段中传递grand_total以获取最小值,最大值,计数,平均值,偏差等。
http://<ip_address>:<port>/solr/<core_name>/select?wt=json&indent=true&q=*:*&start=0&rows=10&stats=true&stats.field=grand_total
答案 2 :(得分:1)
Solr版本:5.4及以上。
可能是帖子已经过时了,但肯定会对某人有所帮助。
我有一个解决方案,我已经在我的项目中实现了。
您必须使用json facet根据构面结果获得最大值和最小值。
json.facet={
tags_group:{
type:terms,
field:tags,
limit:-1,
facet:{
pricemin:{
type:terms,
field:price,
limit:1,
sort:{
x:asc
},
facet:{
x:"min(price)"
}
},
pricemax:{
type:terms,
field:price,
limit:1,
sort:{
y:desc
},
facet:{
y:"max(price)"
}
}
}
}
}
在上面的Json方面,我使用了标签作为提交(多值),这将创建一个像这样的桶
<str name="val">Letter Holder</str>
<int name="count">2</int>
<lst name="pricemin">
<arr name="buckets">
<lst>
<double name="val">899.0</double>
<int name="count">1</int>
<double name="x">899.0</double>
</lst>
</arr>
</lst>
<lst name="pricemax">
<arr name="buckets">
<lst>
<double name="val">1299.0</double>
<int name="count">1</int>
<double name="y">1299.0</double>
</lst>
</arr>
</lst>