如何降低 dismax 中的术语

How to down boost a term in dismax

全部:

我想做的是给内容字段中有 "season" 的文档打高分,严厉惩罚标题字段中有 "season" 的文档,并提升新创建的文档。

我想知道如何在 Dismax(或 eDismax)中做到这一点?谢谢

在使用 dismax(或 edismax)查询解析器时,查询字段在 qf 参数下指定,并且也在那里应用提升。例如,在您的情况下:

select?q=season&qf=content^1000 title^0.001&defType=dismax

为了提升新创建的文档,您还需要指定当旧文档根据搜索条件获得更高分数时会发生什么。如果你的意思是在分数相等的情况下,新文档应该在上面然后添加

sort=score desc,created_at desc

到您的查询,假设您将插入时间存储在字段名称 "created_at" 下。

提升 qf 参数将提升字段,而不管字段中的值如何。为了提升内容字段中包含关键字 "season" 的文档,请改用 "bq" 参数。例如

select?q=*&bq=content:season^50&bq=title:season^0.001

要提升新创建的文档,请使用

之类的提升功能

recip(ms(NOW,mydatefield),3.16e-11,1,1)

其中 mydatefield 是包含文档创建或更新时间戳的字段。

更多boost函数的使用方法可以参考here

在 DisMax 中,您可以使用以下方法降低字段标题中包含单词 'season' 的文档的相关性得分:

    - ['bf', "if(tf(title,'season'),-5,0)"]

示例。如果在没有 bf 相关性提升的情况下文档的相关性得分为 5.6,并且该文档在标题字段中包含单词内容,则在应用 bf 后文档的相关性得分将为 5.1,因为 Solr 将 -5 乘以 queryNorm(这对所有内容都是常数结果集中的文档,并且不影响其顺序)在将产品添加到相关性分数之前。对于这个例子,我们假设 queryNorm = 0.1 所以 5.6 - (5 * 0.1) 给出 5.1.

以上代码为yaml格式,用于VuFind中相关性设置