全部:
我想做的是对内容字段中有"季节"的文档进行高评分,并对标题字段中有《季节》的文档进行重罚,并提升新创建的文档。
我想知道如何在Dismax(或eDismax)中做到这一点?感谢
qf参数的提升将提升字段,而不管字段中的值如何。为了增强内容字段中包含关键字"季节"的文档,请改用"bq"参数。例如
select?q=*&bq=content:season^50&bq=title:season^0.001
要增强新创建的文档,请使用类似的增强功能
recip(ms(NOW,mydatefield),3.16e-11,1,1)
其中mydatefield是包含文档创建或更新时间戳的字段。
有关boost函数使用的更多详细信息,请访问
使用dismax(或edismax)查询解析器时,查询字段是在qf参数下指定的,boosting也在那里应用。例如,在您的案例中:
select?q=season&qf=content^1000 title^0.001&defType=dismax
为了增强新创建的文档,您还需要指定当旧文档根据搜索条件获得更高分数时会发生什么。如果你的意思是,在分数相等的情况下,新文档应该在上面,然后添加
sort=score desc,created_at desc
假设您将插入时间存储在字段名"createdAt"下。
在DisMax中,您可以使用:来降低字段标题中包含"季节"一词的文档的相关性得分
- ['bf', "if(tf(title,'season'),-5,0)"]
示例。如果一个文档的相关性分数在没有bf相关性提升的情况下为5.6,并且该文档的标题字段中有单词内容,则在应用bf后,该文档的相关性得分将为5.1,因为Solr在将乘积添加到相关性分数之前,将-5乘以queryNorm(对于结果集中的所有文档,queryNorm都是常数,并且不影响其顺序)。对于本例,假设queryNorm=0.1,那么5.6-(5*0.1)给出5.1。
上面的代码是yaml格式的,用于VuFind中的相关性设置。