代码之家  ›  专栏  ›  技术社区  ›  Paul-Jan

查询和/或搜索SharePoint文档ID

  •  1
  • Paul-Jan  · 技术社区  · 15 年前

    我们启用了文档ID为的SharePoint 2010环境。

    给定(部分)文档ID,我们希望以编程方式检索与该ID匹配的文档。问题似乎是此列非常特殊,因为它可能需要特殊处理。

    使用spsitedataquery,获取作为 视场 工作良好。但是,将其作为 在哪里? 查询不会导致提取任何文档。

    使用搜索API根本没有给我们带来任何好处。

    有没有人成功地解决了这个问题,或者对如何解决这个问题有什么建议?

    [更新] 结果发现我们被XML中的细微错误和错误的调试误解所愚弄。这东西很好用。

    3 回复  |  直到 14 年前
        1
  •  4
  •   OneOff    14 年前

    我通常不会为这些事情做出贡献,因为比我以前更聪明的人,但由于这是一个没有正确答案的老问题,我想我会为那些找到这一页的人添加我的想法。

    我一直在为此苦苦挣扎,但经过一点点的挖掘和学习,我得到了这个工作。 我正在针对SharePoint2010和Office365测试版使用SharePoint客户端对象模型。

    首先查看“所有列表项”查询:

    Microsoft.SharePoint.Client.CamlQuery.CreateAllitemsquery().viewXML

    "<View Scope=\"RecursiveAll\">\r\n <Query>\r\n </Query>\r\n</View>"

    在查询中插入where子级

    然后加入

    <Eq><FieldRef Name="_dlc_DocId" /><Value Type="Text">MDXC2KE55ASN-3-80</Value></Eq>

    将MDXC2KE55ASN-3-80替换为您在其中查找的文档ID。

    另外,别忘了,你也可能想利用这些:

    <ViewFields><FieldRef Name="_dlc_DocId" /></ViewFields>

    <RowLimit>1</RowLimit>

    然后使用list.getitems()方法返回ListItemCollection。

        2
  •  0
  •   Peter Tillemans    15 年前

    以防万一没有人能从SharePoint基础架构的深处获得一个灵活的解决方案:

    谷歌会怎么做?

    切片是,将其切丁,然后将其放入反向索引中。

    Solr和Lucene为此提供了绝佳的工具。这样做的目的是将docid切成小块,并将文档的位置添加到该块的bucket中。

    假设我们有一个ID为abcd123的“非常好的文档”。你可以把它加到桶里

    ABCD,BCD1,CD12,D123

    在搜索部分ID(+其他数据,如日期、类型,…)时,您(以及搜索引擎)创建bucket的联合+应用附加约束。

    要做到这一点,您需要为SharePoint服务器编写一个spider,并编写一个例行程序,用于创建要索引的数据元素记录。

    把一个很好的REST接口放在它的前端(实际上solr已经有了这个接口),将它集成到主SharePoint服务器中,没有人需要知道它背后还有其他东西在运行。

    这些产品还可以增量地更新索引,以便保持最新。

        3
  •  0
  •   user155180    15 年前

    您可以使用以下方法获取文档ID。

    spfile file=methodToUploadFileToServer(web,filePath); spListItem item=file.item; string docid=item.properties[“_dlc_docid”].toString();