SOLR结合和加权结果

时间:2012-01-17 11:16:30

标签: search solr lucene

我有以下任务:查询SOLR并根据多个条件返回加权列表。

实施例: 我有以下字段的文档,它们主要代表电影:

姓名,流派,演员,导演

我想返回按以下条件排序的20个文件

  1. 该文件分享1名演员并且来自同一导演(5分)
  2. 该文件共有2名或更多演员(3分)
  3. 该文件与导演分享(3分)
  4. 该文件属于同一类型,并分享演员(2分)
  5. 该文件属于同一类型(1分)
  6. 然后拍摄这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

    返回的结果应为:

    1. Id:1,积分:14(匹配所有5个条件)
    2. Id:3,积分:4(匹配条件3和5)
    3. Id:2,积分:0(匹配0条件)
    4. 无论如何直接在SOLR中执行此操作?

      一如既往地提前感谢:)

2 个答案:

答案 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/,了解这是否更适合您的需求,或者向您展示如何制作自己的排名算法。