【问题标题】:Sunspot: How to implement a Search Result Hierarchy?太阳黑子:如何实现搜索结果层次结构?
【发布时间】:2012-03-19 18:22:09
【问题描述】:

我目前正致力于在 Rails 项目中通过 Sunspot 实施 Solr。

查看文档,我看不到如何实现搜索结果的层次结构,我的意思是:

  • 所有符合查询且拥有头像的用户都应该是 首先显示。

  • 所有符合查询且没有头像的用户都应该 显示在下方。

  • 等等……

我将不胜感激有关如何实施此类系统的任何指导或参考。

【问题讨论】:

  • 请记住,SOLR 和 Lucene 没有“匹配”的二元方法,而是提供相关性分数(介于 0 和 1 之间)。因此,如果由于个人资料图片的存在而显示的低相关性“命中”远高于高相关性命中,那么您的方法可能会导致意外结果。例如。查询“john maynard smith”可能与“John M Smith”具有高相关性匹配,但与“Jason Smith”具有低相关性匹配,但如果 Jason Smith 有照片,它将在结果列表中显示更高。在我看来,这将是不好的可用性。
  • 这可能会有所帮助:stackoverflow.com/a/9726365/604511

标签: mysql ruby-on-rails ruby solr sunspot


【解决方案1】:

如果您想先向用户显示个人资料照片,然后再向用户显示 -
您可以使用sortMissingLast 进行排序,这将导致所有没有任何值的记录最后出现。
否则,对于没有值的记录有一个默认值,以便它们在排序时出现在最后。

【讨论】:

    【解决方案2】:

    多年来,我多次听到这个请求,但它并不像人们预期的那样奏效。最坏情况的行为非常糟糕而且非常普遍。

    您可能不想完全这样做。只要您包含一个常用术语,例如“Jr”,您就必须在第一个没有图片的个人资料之前显示数千个带图片的结果,即使那个结果是正确的。

    这将比您预期的更频繁地发生,因为常见的名称很常见,所以它们经常出现在查询中并匹配很多文档。这可能发生在您最常见的查询中。哎呀。

    相反,使用质量因子提升结果。如果有两个“Joe Smith”个人资料,带有图片的个人资料更好,应该首先显示。您可以使用 edismax 结果处理程序的“boost”参数来执行此操作。如果个人资料有照片,则使用 2 的提升,否则使用 1 的提升。您可能必须使用确切的值才能获得所需的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多