通过多个字段的总和获得最终得分

时间:2017-12-13 19:50:44

标签: ruby solr sunspot

我想构建一个搜索,优先考虑字段匹配的数量而不是一个字段而不是另一个字段。所有字段都具有相同的提升值,最终得分应通过总和匹配字段提升来计算。如果全文匹配两个字段并且每个字段具有提升1,则最终得分将是1 + 1 = 2。

让我们举个例子:

class Event < ApplicationRecord searchable do text :title text :category text :artist_name end end

假设我有两个事件:

活动1: 名称:&#34;圣诞节&#34; 艺术家姓名:&#34; AC / DC&#34;

活动2: 名称:&#34;新年节日&#34; 艺术家姓名:&#34; Queen&#34;

因此,如果用户仅搜索&#34; festival&#34;,则两个事件都返回相同的分数,因为它匹配事件的两个名称。 但是,如果用户搜索&#34;节日AC / DC&#34;,我想首先返回事件1 或只是事件1 ,因为它匹配活动名称(节日)和艺术家姓名(AC / DC)。而事件2 只是匹配事件名称(节日)。 事件1 得分应为2,而事件2 得分应为1.

关于我该怎么做的任何建议?这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

看起来你正在混淆得分和提升,我认为你的问题应该标题为通过总计每个得分来计算总得分(无论加速度如何)。

字段分数是根据字段匹配计算的,它们可以应用任意一组加法或乘法增强(函数和/或匹配子查询)。但最终你想要的是通过将每个场分数相加来计算全局得分,而不是增加自己的得分。

例如,

DisMax查询解析器可以精确地控制使用tie(Tie Breaker)参数计算最终得分的方式:

  

tie参数指定一个浮点值(应该是某个值   远远少于1)在DisMax查询中用作决胜局。

     

当针对多个字段测试来自用户输入的术语时,   多个字段可能匹配。如果是这样,每个字段将生成一个   根据该字段在该字段中的常见程度而得出的不同分数(for   每个文件相对于所有其他文件)。 tie参数允许   您可以控制查询的最终得分将受到多大影响   通过较低得分领域的得分与最高得分相比较   得分领域。

     

值&#34; 0.0&#34; - 默认值 - 使查询成为纯粹的&#34;析取   max query&#34;:也就是说,只有最大得分子查询有助于   最后的分数。值&#34; 1.0&#34;使查询成为纯粹的&#34;析取   总和查询&#34;哪里最大得分子查询无关紧要   是,因为最终得分将是子查询得分的总和。   通常,较低的值(例如0.1)很有用。

在您的情况下,您需要析取总和查询,因此您可能希望将tie设置为1.0