Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SiteData Webservice进行爬网时Sharepoint文档的唯一标识符_Sharepoint_Moss_Wss_Uniqueidentifier_Web Crawler - Fatal编程技术网

使用SiteData Webservice进行爬网时Sharepoint文档的唯一标识符

使用SiteData Webservice进行爬网时Sharepoint文档的唯一标识符,sharepoint,moss,wss,uniqueidentifier,web-crawler,Sharepoint,Moss,Wss,Uniqueidentifier,Web Crawler,有人知道如何将“UniqueID”属性映射到托管属性,以便在高级搜索结果中显示它吗?当我尝试使用共享服务管理中的元数据属性映射链接创建新的托管属性时,此属性不可见 使用SiteData或Lists web服务,我可以看到“ows_UniqueId”属性,使用对象模型,我可以访问SPListItem.UniqueId属性-但我似乎找不到将其映射到已爬网/托管属性的方法。它应该已经被索引。您是否尝试过使用objectid?这显示为映射到SharePoint:objectid(文本)。它看起来最接近您

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


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

它应该已经被索引。您是否尝试过使用
objectid
?这显示为映射到SharePoint:objectid(文本)。它看起来最接近您的目标。

这有点痛苦,可能不受支持,但以下是您需要做的事情,以使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();
}
运行该代码后(以及在您希望涵盖的所有列表/库上),您需要在共享服务搜索管理中执行三个步骤:

  • 执行完全爬网
  • 完整爬网完成后,导航到已爬网的属性类别(通常在服务器上),并验证是否存在名为ows_UniqueId的属性。然后需要创建一个名为UniqueId的托管属性,该属性映射到ows_UniqueId
  • 执行另一次完全爬网
第二次完全爬网完成后,应该在包含UniqueId的索引中填充数据。您可以通过修改搜索核心结果在高级搜索中公开它:

  • 打开web部件进行编辑
  • 展开“结果查询选项”
  • 修改所选列的XML以包含UniqueId的引用
  • 修改数据视图属性的XSL,以包含一条语句来输出UniqueId
  • 单击“确定”,必要时发布页面

谢谢你的回复,亚历克斯。我尝试使用objectid,但发现它检索webservice返回的“webid”。我刚刚检查了数据库,发现MSSCrawlURL表中的“CompactURL”列包含了我在Web服务返回的ows_uniqueid属性中得到的值。但是没有这样的爬网属性可以映射到托管属性。有什么想法吗??谢谢regards@deepa.s这应该是可以实现的,但很抱歉,我不知道如何实现。我从未发现web服务有多好。此外,您可能已经知道,但查询数据库时要小心: