Solr按相关性排序并包含多个字段

时间:2016-06-22 08:21:58

标签: sorting solr solr-query-syntax

我正在使用Solr 5.3.0制作新闻搜索系统。假设我有以下新闻领域:{

  • 标题
  • 内容
  • 日期
  • NewsType

}

我在此搜索系统中搜索公司名称和经理姓名。让我们说" Stark Industries"作为公司名称和" Tony Stark"作为经理姓名。我想按日期(这很容易),相关性和以下规则对结果进行排序:

A:

  1. 新闻中的条款同时存在于' Title'字段和'内容'字段。

  2. 这些条款仅存在于'标题'字段。

  3. 这些条款仅存在于'内容'字段。

  4. B:

    1. 公司名称(Stark Industries)和经理姓名(Tony Stark)都存在的消息。

    2. 仅存在公司名称的新闻。

    3. 仅存在经理名称的新闻。

    4. 订单应该是1> 2> 3(这意味着1应该在2的顶部)。 A和B应该是两种不同的方式来获得新闻。最终得分可能等于A * B.

      我给#34;标题"比#34;内容更重的领域"使用此代码defType = edismax & qf=notice_title^200+notice_content的字段。所以我做了#34; Title"比'"内容"更重要的领域领域。

      但是这样,我无法确保A1> A2> A3。它只会增加“标题”的得分。领域。 与规则B相同,我只能使用qf来增加Comany Name的权重。

      如果有办法增加(标题&&内容)的权重:( CompanyName&& ManagerName)应该有帮助。 (我试着在这两个字段中都存在这两个术语。)但是这种语法在qf中不起作用。

      任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以为字段设置omitTermFreqAndPosition,这将忽略字段中字词的频率,使得分数与字词在文档中出现的次数无关。

话虽这么说,相关性计算通常比拥有这样的硬规则更流畅,但你可以通过函数查询排序来实现它们。 Using the function query,您可以自行发出查询,然后按每个查询进行排序。

答案 1 :(得分:0)

利用Solr boost查询来实现这一目标。