0

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

  • 标题
  • 内容
  • 日期
  • 新闻类型

}

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

A:

  1. 有关术语同时存在于“标题”字段和“内容”字段中的消息。

  2. 有关术语仅存在于“标题”字段中的消息。

  3. 有关条款仅存在于“内容”字段中的消息。

乙:

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

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

  3. 只有经理姓名存在的新闻。

顺序应该是 1>2>3(这意味着 1 应该在 2 的顶部)。而A和B应该是两种不同的新闻评分方式。最终得分可能等于 A*B。

我使用此代码赋予“标题”字段比“内容”字段更大的权重defType = edismax & qf=notice_title^200+notice_content。所以我让“标题”字段比“内容”字段更重要。

但是通过这种方式,我无法确定 A1 > A2 > A3。它只会增加“标题”字段的分数。与规则 B 相同,我只能使用 qf 来增加公司名称的权重。

如果有办法增加 (Title && Content):(CompanyName && ManagerName) 的权重,应该会有所帮助。(我试图表示这两个字段中都存在这两个术语。)但是这种语法在 qf 中不起作用。

任何帮助将不胜感激。

4

2 回答 2

0

利用 Solr 增强查询来实现这一点。

于 2016-06-30T19:21:13.313 回答
0

您可以omitTermFreqAndPosition为您的字段设置,这将忽略该字段中术语的频率,使分数独立于该术语在文档中出现的次数。

话虽这么说,在相关性计算中流利一点通常比拥有这样的硬规则更好,但您可以通过函数查询排序来实现它们。使用该功能query,您可以自己发出查询,然后按每个查询进行排序。

于 2016-06-22T10:54:32.300 回答