我正在尝试创建一个搜索引擎,显示包含不同标签的结果。结果必须按相关性排序。
假设我有以下型号:
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)。
我一直在努力寻找一种没有结果的直接方法来实现这一目标。有没有直接的方法呢?如果没有,逐个排序结果将是唯一的解决方案吗?
由于
答案 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);