solr 中按日期字段提升定义为:

{!boost b=recip(ms(NOW,datefield),3.16e-11,1,1)}

我到处找(例子: 用于提升评分的 Solr Dismax 配置Solr 增强多值日期字段 他们都引用了 Solr相关性常见问题解答),所使用的定义相同。但我发现这并不足以提高我的成绩。我怎样才能让这个日期增强得更强烈?

用户正在搜索两个关键字。这两个项目的标题和描述中都包含两个关键字(按相同顺序)。两个关键字均不重复。

而且 solr 调试输出对我来说太混乱了,无法理解问题。

现在,这并不是一个大问题。99% 的查询工作正常并产生预期结果,所以它不像 solr 根本不工作,我只是发现这种情况让我非常困惑,不知道如何继续。

有帮助吗?

解决方案

用户正在搜索两个关键字。这两个项目都包含标题和描述中的两个关键字(以相同的顺序)。两个关键字都没有重复。

好吧,根据你的例子,很明显你的结果已经落入 tie 情况。为了理解这个问题 令人困惑的 调试输出并设计一个 决胜局 政策,了解很重要 dismax.

DisMax 查询时,用户输入的不同术语将针对不同字段执行,如果其中许多术语命中(该术语出现在同一字段中的不同字段中) document)使用得分较高的命中,但是命中该命中的其他子查询会发生什么情况 document 对于这个术语?嗯,这就是 tie 参数定义。 DisMax 将计算术语查询的分数:

score= [score of the top scoring subquery] + tie * (sum of other hitting subqueries)

结果, tie 参数是一个介于 0 和 1 之间的值,用于定义是否 Dismax 只会考虑最大命中 score 对于一个术语(设置 tie=0),某个术语的所有命中(设置 tie=1)或介于这两个极端之间的东西。

boost 参数非常相似 bf 参数,但它不会将其结果添加到最终分数中,而是将其相乘。这仅适用于 扩展 Dismax 查询解析器 或者 清晰的查询解析器.

有一篇文章很有趣 比较 Boost 方法 SOLR 的内容可能对您有用。

本回答参考:

希希尔

其他提示

配方(x, m, a, b) 实施 f(x) = a/(xm+b) 和 :

  • x :文档年龄(以毫秒为单位),定义为 ms(NOW,<datefield>).

  • m :定义用于应用升压的时间尺度的常量。它应该与您认为的旧文档年龄(a 参考时间)以毫秒为单位。例如,选择一个 参考时间 1 年 (3.16e10ms) 意味着使用其倒数: 3.16e-11 (1/3.16e10 舍入)。

  • ab 是常量(任意定义)。

  • xm = 1 当文档为1时 参考时间 旧(乘数 = a/(1+b)).
    xm ≈ 0 当文档是新的时,结果接近于 a/b.

  • 对 a 和 b 使用相同的值可确保最近文档的乘数不超过 1。

  • a = b = 1, 1 参考时间 旧文档的乘数约为 1/2,即 2 参考时间 旧文档的乘数约为 1/3,依此类推。

如何让约会的动力更强?

  • 增加 m :选择较低的 参考时间 例如 6 个月,这给了我们 m = 6.33e-11. 。与 1 年参考相比,随着文档期限的增加,乘数下降速度加快 2 倍。

  • 减少 ab 扩展函数的响应曲线。这可能非常具有攻击性,请参阅 这个例子 (第 8 页)。

  • 将 boost 应用到 boost 函数本身 bf (升压功能) 参数(这是一个 dismax 参数,因此需要使用 DisMax 或 eDisMax 查询解析器),例如:

    bf=recip(ms(NOW,datefield),3.16e-11,1,1)^2.0
    

重要的是要注意以下几点:

  • bf 是一个 添加剂 升压并充当 奖金 添加到较新文档的分数中。

  • {!boost b} 是一个 乘法 提升并更多地充当 惩罚 应用于旧文档的分数。

  • bf 分数(添加到全局分数中的“奖励”)的计算与相关性分数(全局分数)无关,这意味着分数较高的结果集可能不会像分数较低的结果集那样受到影响。相反,无论结果集相关性如何,乘法提升都会以相同的方式影响分数,这就是为什么它通常是首选的。

  • 不使用 recip() 对于多个日期 参考时间 将来否则会产生负值。

另请参阅诺兰·劳森 (Nolan Lawson) 发表的这篇非常有见地的文章 比较 Solr 中的 boost 方法.

中有一个很好的例子 倒数浮点数函数 这将使您清楚地了解增强配方的工作原理。如果你发现 dismax 无法为您提供对提升的足够控制,您将不得不进行一些修改 BoostQParserPlugin.

3.16e-11的乘数将单位从毫秒更改为几年(因为每年约为3.16e10毫秒)。因此,最新日期将产生接近1/(0+1)或1的值年龄将产生1/(2+1)或1/3。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top