使用 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。
您可能正在查看多映射索引,请参阅:
http://ravendb.net/docs/article-page/3.0/csharp/indexes/multi-map-indexes