使用RavenDB的复合索引

时间:2016-02-19 22:36:47

标签: c# .net ravendb

我正在尝试使用RavenDB创建一个复合索引。基本上,我有2个模型,我需要“加入”并能够对结果进行搜索。

以下是我的模型示例:

模型1:

public class UserProfile {
    public string ProfileId { get; set }
    public string FirstName { get; set }
    public string LastName { get; set }
    public string EmailAddress { get; set }
}

模型2:

public class UserProjects {
    public string UserProjectId { get; set }
    public List<Project> Projects { get; set }
}

这是项目模型,如果你想知道:

public class Project {
    public string ProjectId { get; set; }
    public string Name { get; set; }
}

UserProjectId属性如下:users/<Email Address>/projects

我能够创建一个返回所有字段的索引,但我无法搜索某些字段。

这是我的索引:

public class ProfileProjectIndex : AbstractIndexCreationTask<UserProfile> {
    Map = profiles =>
        from profile in profiles
        select new {
            profile.ProfileId,
            profile.FirstName,
            profile.LastName,
            profile.EmailAddress
        };

    TransformResults = (db, results) =>
        from result in results
        let project = db.Load<UserProjects>("users/" + profile.EmailAddress + "/projects")
        select new {
            result.ProfileId,
            result.EmailAddress,
            result.FirstName,
            result.LastName,
            project.UserProjectId,
            project.Projects
        };
}

现在,当从Web界面查询Raven时,此索引会返回我想要的完整数据列表,但我需要能够根据UserProjects.Projects列表中包含的某些值过滤结果,例如:

Project.Projects.Contains(x => x.ProjectId == "projects/1234")

时返回包含相关项目的所有用户个人资料

任何RavenDB大师都可以启发我吗?哦,我正在使用RavenDB 2.5。

1 个答案:

答案 0 :(得分:0)

您可能正在查看多地图索引,请参阅:

http://ravendb.net/docs/article-page/3.0/csharp/indexes/multi-map-indexes