3

有人知道如何将“UniqueID”属性映射到托管属性,以便在高级搜索结果中显示它吗?当我尝试使用共享服务管理中的元数据属性映射链接创建新的托管属性时,此属性不可见。

使用 SiteData 或 Lists Web 服务,我可以看到“ows_UniqueId”属性,并且使用对象模型我可以访问 SPListItem.UniqueID 属性 - 但我似乎找不到将其映射到已爬网/托管属性的方法。

4

2 回答 2

0

它应该已经被索引了。你试过使用objectid吗?这显示为映射到SharePoint:objectid(Text)。它看起来最接近你所追求的。

于 2009-09-16T15:25:14.260 回答
0

这有点痛苦,并且可能不受支持,但是您需要执行以下操作才能使 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();
}

运行该代码后(以及在您想要涵盖的所有列表/库上),您需要在共享服务搜索管理中执行三个步骤:

  • 执行完全爬网。
  • 完整爬网完成后,导航到已爬网属性类别(通常是服务器上的/ssp/admin/_layouts/schema.aspx?ConsoleView=crawledPropertiesView)并验证名为 ows_UniqueId 的属性是否存在。然后,您需要创建一个名为 UniqueId 的托管属性,该属性映射到 ows_UniqueId。
  • 执行另一个完全爬网。

第二次完全爬网完成后,您应该在包含 UniqueId 的索引中填充数据。您可以通过修改搜索核心结果在高级搜索中公开它:

  • 打开 Web 部件进行编辑
  • 展开“结果查询选项”
  • 修改选定列的 XML 以包含对 UniqueId 的引用
  • 修改 Data View Properties 的 XSL 以包含输出 UniqueId 的语句
  • 单击确定,并在必要时发布页面
于 2010-10-12T14:58:58.090 回答