Lucene搜索排序

时间:2013-09-11 13:31:37

标签: grails lucene grails-searchable

我需要通过名字和姓氏搜索成员,这是我成功完成的。 接下来我需要做的是成员的连接应该在列表中排在第一位(按连接排序。),就像在Facebook中一样,朋友在列表中排在第一位,而不是社区的其他用户。

我正在使用grails插件可搜索。一种简单的方法是对searchListFromSearchable w.r.t进行排序。连接列表。

以下是域名结构。

class Member extends {

    String firstName
    String lastName

    static searchable = {
        analyzer "simple"
        only = ['firstName', 'lastName']
        firstName boost: 5.0
    }

    static hasMany = [connections: Connection]

}

Connection类如下

class Connection {

    String uuid
    Member connectedMember
    static belongsTo = [member: Member]

}

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

我认为您可以在Lucene的收集步骤或分数步骤中添加排序过程。我认为你首先得到关系,当搜索成员时,你可以检查成员是否在关系中。如果该成员处于该关系中,则可以添加此文档的分数,例如编写自己的收集器,其TopFieldDocCollector扩展score *= 10fsuper.collect() collect之前添加{{1}}

答案 1 :(得分:0)

关于将朋友ID添加到索引的解决方案。在这种情况下,您的搜索查询应该遵循表单+名称:firstName + name:lastName friend:userId ^ 10。 friendId有更大的提升,会让你的朋友在你的查询中排名很高。