0

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

我正在使用 grails 插件 Searchable。一种简单的方法是对searchListFromSearchablewrt 连接的列表进行排序。

以下是域结构。

class Member extends {

    String firstName
    String lastName

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

    static hasMany = [connections: Connection]

}

连接类如下

class Connection {

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

}

有没有 lucene 方法可以做到这一点?

4

2 回答 2

0

我认为您可以在 Lucene 的收集步骤或评分步骤中添加排序过程。我认为您首先获得关系,然后在搜索成员时,您可以检查该成员是否在关系中。如果成员在关系中,则可以添加该文档的分数,例如编写自己的收集器,在方法中扩展TopFieldDocCollector和添加score *= 10f之前。super.collect()collect

于 2013-09-12T07:18:05.510 回答
0

关于将朋友 ID 添加到索引的解决方案。在这种情况下,您的搜索查询应该遵循 +name:firstName +name:lastNamefriend:userId^10 的形式。朋友 ID 有更大的提升,会导致朋友在您的查询中排名靠前。

于 2013-09-14T20:54:13.687 回答