2

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

因此,访问者将在页面上获得一个带有最低和最高价格的滑块,他们可以使用该滑块来定义范围并相应地应用过滤器。

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

但是,为了显示一个范围,我需要最小和最大价格值。我不确定如何从 Solr 获得这个。

此外,当过滤其他方面时,我需要更改此最低和最高价格。但我想不出如何用 Solr 来做到这一点。solr 是否在同一查询中提供最小和最大价格值?

这个怎么做?

或者用 Solr 实现这一点的最佳实践是什么?

4

3 回答 3

3

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

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

此外,您可以添加一个额外的检查,以防万一 facets 不返回任何内容。

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

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

在这里阅读:http ://wiki.apache.org/solr/StatsComponent

于 2013-09-12T06:30:24.093 回答
1

使用statsSOLR,将 stats 参数传递给您的 SOLR 查询,这里我在 stats 字段中传递 grand_total 以获取 min、max、count、mean、deviation 等。

统计 SOLR 维基

http://<ip_address>:<port>/solr/<core_name>/select?wt=json&indent=true&q=*:*&start=0&rows=10&stats=true&stats.field=grand_total
于 2013-09-12T07:13:41.863 回答
1

Solr 版本:5.4 及以上。

可能是帖子很旧,但肯定会对某些人有所帮助。

我有一个解决方案,我已经在我的项目中实施了。

您必须使用 json facet 来根据 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>
于 2016-07-08T09:16:34.283 回答