【问题标题】:Solr + Haystack searchingSolr + Haystack 搜索
【发布时间】:2011-12-01 22:32:18
【问题描述】:

我正在尝试为新应用实现搜索引擎。

该应用程序允许人们对项目进行评分(+1 或 -1) - 为项目评分 +ve 或 -ve。

当人们搜索项目时,我想考虑他们的评分并相应地对结果进行排序。如果该项目是匹配的,它应该显示出来。但如果是高分比赛,则应该稍微提高一下结果。

一场非常好的比赛应该以高分战胜一场相当好的比赛,所以它需要与其他比赛一起加权(即我提升了我的头衔)。

没有卡在 Solr 上,今天才开始玩。

【问题讨论】:

    标签: django solr django-haystack


    【解决方案1】:

    使用 Solr,您可以在包含差异的文档中维护一个字段。
    差值可能在总 +1ve 和 -1ve 之间。

    Solr 允许您使用 function queries 提升字段值。
    因此,您可以使用差异字段的提升进行查询,文档的差异评分优于其他文档。

    从索引方面来看,由于这种差异会经常变化,因此每次都需要更新相应的文档。 Solr 不允许更新单个字段,因此需要处理差异字段的增量更新。

    如果您对此感到担忧,可以尝试使用ExternalFileField
    这允许将文档的某些字段(例如排名、流行度)映射到单独的文件中的索引之外。
    可以更新文件并提交索引以反映更改。
    该字段也可以与函数查询一起使用,以根据需要提升结果,但有很多限制。

    【讨论】:

    • 谢谢-在等待答案时发现了这个-尽管很准确。使用了额外的提升功能:?q=Search+Text&bf='ord(ranking)^10 - 提升 10 只是为了证明它有效!
    【解决方案2】:

    您可以按存储排名的字段对结果进行排序。

    sqs.filter(content='blah').order_by('rating')
    

    【讨论】:

    • 这只是按评级排序结果,而不是考虑评级值来应用提升。所以任何评分高的比赛都会排在首位,即使它的 Solr 分数相对较低。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多