我正在尝试创建一个搜索引擎,该引擎将显示包含不同标签的结果。结果必须按相关性排序。
假设我有以下模型:
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 之间的关系是: 文章(多对多(标签(多对多(文章标签关系
当用户按标记搜索时,应用应返回填充搜索的所有文章:
realm.where(Article.class).equalTo("tags.tag", userSearch).findAll().
但是,我想按相关性对结果进行排序。此示例中的相关性是用户在按相关标记(articleTagsRelation.timesArticleSelectedByTag(搜索时选择文章的次数。
我一直在努力寻找一种直接的方式来实现这一目标,但没有结果。有什么直接的方法可以做到这一点吗?如果没有,对结果逐个排序将是唯一的解决方案?
谢谢
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);