按相关性排序RealmResults

时间:2017-08-18 16:50:49

标签: java realm

我正在尝试创建一个搜索引擎,显示包含不同标签的结果。结果必须按相关性排序。

假设我有以下型号:

public class Article extends RealmObject{
    @PrimaryKey
    private String aID = UUID.randomUUID().toString();
    private RealmList<Tags> tags;
}

public class Tags extends RealmObject{
    @PrimaryKey
    private String tID = UUID.randomUUID().toString();
    private String tag;
    private RealmList<articleTagsRelation> articlesTag;
}

public class articleTagsRelation extends RealmObject{
    private String tID;
    private String aID;
    private long timesArticleSelectedByTag; 
}

因此RealmObjects之间的关系是: 文章(多对多)标签(多对多)articleTagsRelation

当用户按标签搜索时,应用应返回填写搜索的所有文章:

realm.where(Article.class).equalTo("tags.tag", userSearch).findAll().

但是,我想按相关性对结果进行排序。此示例中的相关性是用户在按相关标签搜索时选择文章的次数(articleTagsRelation.timesArticleSelectedByTag)。

我一直在努力寻找一种没有结果的直接方法来实现这一目标。有没有直接的方法呢?如果没有,逐个排序结果将是唯一的解决方案吗?

由于

1 个答案:

答案 0 :(得分:1)

Realm 3.5.0 +:

public class Article extends RealmObject{
    @PrimaryKey
    private String aID = UUID.randomUUID().toString();
    private RealmList<Tags> tags;

    @LinkingObjects("article")
    private final RealmResults<ArticleTagsRelation> articleOfRelation = null;
}

public class Tags extends RealmObject{
    @PrimaryKey
    private String tID = UUID.randomUUID().toString();
    private String tag;

    @LinkingObjects("tag")
    private final RealmResults<ArticleTagsRelation> tagOfRelation = null;
}

public class ArticleTagsRelation extends RealmObject{
    private Tags tag;
    private Article article;
    private long timesArticleSelectedByTag; 
}

realm.where(Article.class)
     .equalTo("tags.tag", userSearch)
     .findAllSorted("articleOfRelation.timesArticleSelectedByTag", Sort.DESCENDING);