全部:
我想要做的是对内容字段中具有“季节”的文档进行高分,并在标题字段中严厉惩罚具有“季节”的文档并提升新创建的文档。
我想知道如何在 Dismax(或 eDismax)中做到这一点?谢谢
全部:
我想要做的是对内容字段中具有“季节”的文档进行高分,并在标题字段中严厉惩罚具有“季节”的文档并提升新创建的文档。
我想知道如何在 Dismax(或 eDismax)中做到这一点?谢谢
提升 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 函数的细节可以在这里找到
使用 dismax(或 edismax)查询解析器时,查询字段在 qf 参数下指定,并且也应用了提升。例如,在您的情况下:
select?q=season&qf=content^1000 title^0.001&defType=dismax
为了提升新创建的文档,您还需要根据搜索条件指定当旧文档具有更高分数时会发生什么。如果您的意思是在相同分数的情况下,新文档应该在上面然后添加
sort=score desc,created_at desc
到您的查询,假设您将插入时间存储在字段名称“created_at”下。
在 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中的相关性设置。