有人知道如何将“UniqueID”属性映射到托管属性,以便在高级搜索结果中显示它吗?当我尝试使用共享服务管理中的元数据属性映射链接创建新的托管属性时,此属性不可见。
使用 SiteData 或 Lists Web 服务,我可以看到“ows_UniqueId”属性,并且使用对象模型我可以访问 SPListItem.UniqueID 属性 - 但我似乎找不到将其映射到已爬网/托管属性的方法。
有人知道如何将“UniqueID”属性映射到托管属性,以便在高级搜索结果中显示它吗?当我尝试使用共享服务管理中的元数据属性映射链接创建新的托管属性时,此属性不可见。
使用 SiteData 或 Lists Web 服务,我可以看到“ows_UniqueId”属性,并且使用对象模型我可以访问 SPListItem.UniqueID 属性 - 但我似乎找不到将其映射到已爬网/托管属性的方法。
它应该已经被索引了。你试过使用objectid
吗?这显示为映射到SharePoint:objectid(Text)
。它看起来最接近你所追求的。
这有点痛苦,并且可能不受支持,但是您需要执行以下操作才能使 UniqueId 成为已爬网属性/映射属性,以便可以将其包含在高级搜索结果中...
首先,您需要在内部更改您希望搜索的列表上的 UniqueId 字段,使其不再隐藏并且可以被爬虫索引。这是一些示例对象模型代码:
// this is the identifier for UniqueId
Guid g = new Guid("4b7403de8d9443e89f0f137a3e298126");
// we will need these for reflection in a bit
BindingFlags bf = BindingFlags.NonPublic | BindingFlags.Instance;
using (SPSite s = new SPSite("http://SharePoint/")) {
// grab the list that contains what you want indexed
// and the UniqueId field from that list
SPList l = s.RootWeb.Lists["Your Custom List/Library"];
SPField f = l.Fields[g];
// We need to call the private method SetFieldBoolValue
// to allow us to change the Hidden property to false
MethodInfo mi = f.GetType().GetMethod("SetFieldBoolValue", bf);
mi.Invoke(f, new object[] { "CanToggleHidden", true });
f.Hidden = false;
f.Update();
}
运行该代码后(以及在您想要涵盖的所有列表/库上),您需要在共享服务搜索管理中执行三个步骤:
第二次完全爬网完成后,您应该在包含 UniqueId 的索引中填充数据。您可以通过修改搜索核心结果在高级搜索中公开它: