使用 RavenDB 的复合索引

本文关键字:索引 复合 RavenDB 使用 | 更新日期: 2023-09-27 18:35:35

我正在尝试使用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。

使用 RavenDB 的复合索引

您可能正在查看多映射索引,请参阅:

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