我正在使用Solr 5.3.0制作新闻搜索系统。假设我有以下新闻领域:{
}
我在此搜索系统中搜索公司名称和经理姓名。让我们说" Stark Industries"作为公司名称和" Tony Stark"作为经理姓名。我想按日期(这很容易),相关性和以下规则对结果进行排序:
A:
新闻中的条款同时存在于' Title'字段和'内容'字段。
这些条款仅存在于'标题'字段。
这些条款仅存在于'内容'字段。
B:
公司名称(Stark Industries)和经理姓名(Tony Stark)都存在的消息。
仅存在公司名称的新闻。
仅存在经理名称的新闻。
订单应该是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中不起作用。
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以为字段设置omitTermFreqAndPosition
,这将忽略字段中字词的频率,使得分数与字词在文档中出现的次数无关。
话虽这么说,相关性计算通常比拥有这样的硬规则更流畅,但你可以通过函数查询排序来实现它们。 Using the function query
,您可以自行发出查询,然后按每个查询进行排序。
答案 1 :(得分:0)
利用Solr boost查询来实现这一目标。