【问题标题】:Is there any way to implement customized (except index/count ) facet values sorting in solr?有什么方法可以在 solr 中实现自定义(除了 index/count )分面值排序吗?
【发布时间】:2018-06-05 09:50:07
【问题描述】:

假设我们正在使用 iphone 进行搜索,并且在品牌方面,我们得到以下方面 1)安泽 2)苹果 3)阿拉蕾 4)炮台 5)每日物品

它基于字母顺序。但是我们想根据 每个品牌的一些定制分数。 solr faceting 中是否有任何可用的功能可以满足上述要求?

如果我们有针对每个品牌方面价值的分数,那么有没有办法在 solr 端执行方面?

目前,solr 只有两个 facet.sort 选项,即 index 和 count。 除了索引和计数之外,我们还希望合并其他排序选项。 请提出建议。

【问题讨论】:

  • 我们可以为一个结果集讨论多少个方面术语?你可以在自己的中间件中做到这一点吗?
  • 在 Solr4 中没有任何其他自定义方式对其进行排序。但是从 Solr5 你可以通过 json.facet 实现自定义排序。欲了解更多信息yonik.com/json-facet-api
  • 感谢您的回复,
  • @MatsLindh 感谢您的回复。我们使用 facet.limit = 500 ,所以我们最多可以得到 500 个 facet 值。在中间件中,我们可以通过编写比较器来实现,但我们试图根据其他字段对构面值进行排序。假设 50 个文档在一个方面值下,我们试图找出这 50 个文档的字段的平均值。基本上,我们正在尝试根据其他一些自定义字段(计数或索引除外)对构面值进行排序。由于该字段在 solr doc 中可用,因此我们不考虑中间件实现。
  • 但是,请记住,构面中的术语只是索引中的术语 - 分面代码不会为每个术语的每次出现获取完整的文档 - 所以我认为信息不会很容易获得。

标签: solr solrj solr4 solrcloud solrnet


【解决方案1】:

由于您正在讨论字段的聚合,您可以使用Facet JSON API

给出的示例符合您的要求:

{
  categories:{
    type : terms      // terms facet creates a bucket for each indexed term in the field
    field : cat,
    sort : "x desc",  // can also use sort:{x:desc}
    facet : {
      x : "avg(price)",     // x = average price for each facet bucket
      y : "max(popularity)" // y = max popularity value in each facet bucket
    }
  }
}

这总结了构面中所有元素的平均价格,同时也按它排序 - 首先为您提供平均价格最高的类别。

可用于在构面下进行聚合的受支持函数列表是available in the reference guide

  • sum, sum(sales), 数值的总和
  • avg, avg(popularity), 数值平均值
  • min, min(salary), 最小值
  • max, max(mul(price,popularity)), 最大值
  • 唯一,唯一(作者),唯一值的数量
  • hll, hll(author), 通过超对数-对数算法进行分布式基数估计
  • percentile, percentile(salary,50,75,99,99.9), Percentile 通过 t-digest 算法估计。按此指标排序时,列出的第一个百分位用作排序值。
  • sumsq、sumsq(rent)、场或函数的平方和
  • variance, wvariance(rent), 数值字段或函数的方差
  • stddev、stddev(rent)、字段或函数的标准差

【讨论】:

  • 感谢@MatsLindh,此信息非常有用。
猜你喜欢
  • 2023-01-05
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多