在multiValued字段上排序是否有任何解决方法?

时间:2011-12-13 16:03:51

标签: solr group-by multivalue

  

可以对文档的“得分”进行排序,也可以对任何multiValued =“false”indexed =“true”字段进行排序,前提是该字段是非标记化的(即:没有分析器)或使用分析器只产生一个Term(即:使用KeywordTokenizer)

docs: - http://wiki.apache.org/solr/CommonQueryParameters#sort

我的原始架构是(您可以考虑以下是GROUP-BY): -

  • 产品(id,unique)
    • 发表评论的用户(multiValued)
    • 每个用户的last_comment_date(multiValued,一个用户可以发表多个评论,但只捕获最后一个评论日期)

如果允许在multiValued上进行排序,则 我可以轻松获得某些用户评论的产品清单,
然后按last_activity_date排序。

然而,它不起作用。
我目前的解决方法是将模式反转为: -

  • 用户+产品(作为ID,唯一)
  • 用户(单一值)
  • last_comment_date
  • 产品

这意味着我(有点)设法获得某些用户评论的产品列表,
按last_comment_date排序,
当然它会导致重复产品
因为产品将出现在每个用户的评论中。

任何模拟分组效果的建议。

之间,我使用solr 3.1 现场坍塌不适用。

1 个答案:

答案 0 :(得分:5)

按多值字段排序不仅仅是待处理或可以修补的内容。

它不可能完成,因为它没有任何意义。

执行此操作的方法是为每个文档创建一个单值字段(在索引时填充最后一个日期),然后对其进行排序。即当索引遍历用户列表及其上一个活动日期时,查找最新日期,并将其分配给文档的last-activity-date字段。