我正在索引2个不同的文档,如下所示。
public class User
{
public UserId UserId { get; set; }
public string DisplayName { get; set; }
}
public class UserGroup
{
public UserGroupId UserGroupId { get; set; }
public string Name { get; set; }
}
//this is for indexing result
public class SecurityObject
{
public virtual Guid Id { get; set; }
public virtual string DisplayName { get; set; }
public virtual SecurityObjectType ObjectType { get; set; }
}
我的查询如下。正如您在Index
配置中看到的那样,我将Name
属性映射到DisplayName
,但当返回的文档为DisplayName
时,null
属性为UserGroup
。当我查看提取的文档Name
属性未映射到DisplayName
属性时,实际值仍保留在Name
属性上。如何在Name
上将DisplayName
属性正确转换为UserGroup
属性?
_session.Query<SecurityObject, SecurityObjectIndex>()
.Where(s => s.DisplayName.StartsWith(searchTerm))
.ProjectFromIndexFieldsInto<SecurityObject>();
这是我的索引配置:
public class SecurityObjectIndex
: AbstractMultiMapIndexCreationTask<SecurityObject>
{
public override string IndexName
{
get
{
return "UserAndUserGroup/SecurityObjectIndex";
}
}
public SecurityObjectIndex()
{
AddMap<User>(users => from u in users
select new
{
DisplayName = u.DisplayName,
ObjectType = SecurityObjectType.Users
});
AddMap<UserGroup>(userGroups => from u in userGroups
select new
{
DisplayName = u.Name,
ObjectType = SecurityObjectType.Groups
});
}
}
答案 0 :(得分:0)
要从索引字段进行投影,必须使用索引存储这些字段。将以下内容添加到索引定义中:
Store(x=> x.DisplayName, FieldStorage.Yes);
Store(x=> x.ObjectType, FieldStorage.Yes);
或者,您可以使用此快捷方式:
StoreAllFields(FieldStorage.Yes);
但我个人更喜欢单独标记每一个。