价格范围过滤器,带有滑块UI,带有Min& Solr在同一个查询中的最大值?

时间:2013-09-12 06:09:32

标签: jquery solr solrj solrnet

我正在为电子商务网站开展Solr集成。我想提供一个jQuery Slide Range UI(参考http://jqueryui.com/slider/#range)。

因此,访问者将获得一个页面上具有最小和最大价格的滑块,用于定义范围并相应地应用过滤器。

在Solr方面,我了解如何对此进行范围过滤查询。

然而,为了显示范围,我需要最小和最大价格值。我不知道如何从索尔获得这个。

此外,当其他方面被过滤时,我需要改变这个min&最高价格。但我无法思考Solr如何做到这一点。 solr是否提供min&同一查询中的最高价格值?

怎么做?

或者使用Solr实现此目的的最佳实践是什么?

3 个答案:

答案 0 :(得分:3)

我相信你已经获得了当前数据集的方面值, 因此,对于您的范围问题,您必须在客户端对facet值进行排序并提供min&滑块的最大值。

这样它也可以解决您的其他问题,因为应用了过滤器后,返回的构面值也会发生变化。

此外,如果facet没有返回任何内容,您可以添加额外的检查以不显示滑块。

对于大数据范围,我认为您可以使用solr stats例如:

http://localhost:8983/solr/select?q=*:*&stats=true&stats.field=price&rows=0&indent=on

请在此处阅读:http://wiki.apache.org/solr/StatsComponent

答案 1 :(得分:1)

使用SOLR的stats,将stats参数传递给您的SOLR查询,此处我在统计字段中传递grand_total以获取最小值,最大值,计数,平均值,偏差等。

stats SOLR Wiki

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>