如何在dismax中提升一个词

时间:2015-03-31 20:14:38

标签: solr dismax solr-boost

所有

我想要做的是高度评分内容领域中有“季节”的文档,并严格惩罚标题字段中带有“季节”的文档并提升新创建的文档。

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

3 个答案:

答案 0 :(得分:1)

无论字段中的值如何,对qf参数进行提升都会提升字段。为了提升包含关键字" season"在内容字段中使用" bq"参数而不是。对于前。

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

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

这样的提升功能

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

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

有关增强功能使用的更多详细信息,请参见here

答案 1 :(得分:0)

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

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

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

sort=score desc,created_at desc

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

答案 2 :(得分:0)

在DisMax中,您可以降低具有“季节”字样的文档的相关性得分。在字段标题中使用:

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

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

上面的代码采用yaml格式,用于VuFind中的相关性设置。