我有以下任务:查询SOLR并根据多个条件返回加权列表。
实施例: 我有以下字段的文档,它们主要代表电影:
姓名,流派,演员,导演
我想返回按以下条件排序的20个文件
然后拍摄这4部电影:
Id:1
姓名:哈利波特和哲学家的石头
类型:冒险
导演:克里斯哥伦布
演员:Daniel Radcliffe,Rupert Grint,Emma Watson
同上:2
姓名:我和Marilyn的周
类型:戏剧
导演:Simon Curtis
演员:Michelle Williams,Eddie Redmayne,Emma Watson
Id:3
姓名:Percy Jackson&奥运选手:闪电贼
类型:冒险
目录:克里斯哥伦布
演员:Logan Lerman,Brandon T. Jackson,Alexandra Daddario
Id:4
姓名:哈利波特和密室
类型:冒险
导演:克里斯哥伦布
演员:Daniel Radcliffe,Rupert Grint,Emma Watson
我想查询SOLR:根据电影ID返回给我一份相关电影的列表== 4
返回的结果应为:
无论如何直接在SOLR中执行此操作?
一如既往地提前感谢:)
答案 0 :(得分:2)
您可以使用DisMax Query Parser返回加权结果,称为提升。您可以使用查询过滤器为文档中的列赋予不同的权重,如下例所示。你必须修改它以得出你自己的公式,但你应该能够接近。首先调整提升中的数字,但最终可能会进行一些更高级的Function Queries
从您想要查找符合#4
的文档的示例中?q =类型:'冒险'导演:'Chris Columnbus'演员:('Daniel Radcliffe''Rupert Grint''Emma Watson')& qf =导演^ 2.0 +演员^ 1.5 + Genre ^ 1.0安培; FL = *,评分强>
//Get everything that matches #4 ?q=Genre:'Adventure' Director:'Chris Columnbus' Actors:('Daniel Radcliffe' 'Rupert Grint' 'Emma Watson') //use dismax &defType=dismax //boost some fields with a "query filter" //this will make a match on director worth the most //each actor will be worth a little bit less, but 2+ actors will be more //all matches will be added together to create a score similar to your example &qf=Director^2.0+Actor^1.5+Genre^1.0 //Make sure you can see the score for debugging &fl=*,score
答案 1 :(得分:0)
我认为有一种方法可以解决Solr开箱即用的问题。您可以查看http://solr-ra.tgels.com/,了解这是否更适合您的需求,或者向您展示如何制作自己的排名算法。