zoukankan      html  css  js  c++  java
  • SharePoint 2013 Search REST API 使用示例

    转载自:http://www.cnblogs.com/jianyus/p/3321081.html

    前言:在SharePoint2013中,提供Search REST service搜索服务,你可以在自己的客户端搜索方法或者移动应用程序中使用,该服务支持REST web request。你可以使用KeyWord Query Language(KQL)或者FAST Query Language(FQL)来对Search REST Service进行搜索查询,并且,试用与远程客户端应用程序、移动应用程序和其他应用程序。

    一、   Search REST service

    支持方式:

    Search REST service支持 HTTP POST方式和 HTTP GET requests方式

    GET requests

    URL:http://server/_api/search/query

    Get方式你有两种传参方式,如下:

    http://server/_api/search/query?query_parameter=value&query_parameter=value

    http://server/_api/search/query(query_parameter=value&query_parameter=<value>)

    POST requests

    URL:http://server/_api/search/postquery

    在Post方式中,你可以使用JavaScript Object Notation (JSON)方式传参

    Post方式的场景有三种:

    Get方式传参,Url超出长度限制,只有使用Post方式;

    查询条件非常复杂,Get方式难以满足需要,使用Post方式;

    对于某些特定参数,只支持Post方式。

    二、Get方式查看返回XML

    1、  在我配置好的搜索页面上,搜索“北京”,如下图,有4个结果

    2、  使用Get方式返回xml,在_api/search/query 后面添加querytext参数”北京”的Escape值“%E5%8C%97%E4%BA%AC”

    http://URL/_api/search/query?querytext='%E5%8C%97%E4%BA%AC'

     

    (返回的xml截图)

    3、单个项目的XML节点

    复制代码
    <d:element m:type="SP.SimpleDataRow">
      <d:Cells>
        <d:element m:type="SP.KeyValue">
          <d:Key>Rank</d:Key>
          <d:Value>10.3831567764282</d:Value>
          <d:ValueType>Edm.Double</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>DocId</d:Key>
          <d:Value>52</d:Value>
          <d:ValueType>Edm.Int64</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>WorkId</d:Key>
          <d:Value>52</d:Value>
          <d:ValueType>Edm.Int64</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>Title</d:Key>
          <d:Value>北京</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>Author</d:Key>
          <d:Value>系统帐户</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>Size</d:Key>
          <d:Value>120</d:Value>
          <d:ValueType>Edm.Int64</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>Path</d:Key>
          <d:Value>http://url/DocLib/北方城市/北京.txt</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>Description</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>Write</d:Key>
          <d:Value>2013-08-21T02:22:46.0000000Z</d:Value>
          <d:ValueType>Edm.DateTime</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>CollapsingStatus</d:Key>
          <d:Value>0</d:Value>
          <d:ValueType>Edm.Int64</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>HitHighlightedSummary</d:Key>
          <d:Value>
            <c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都<c0>北京</c0>是首都
          </d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>HitHighlightedProperties</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>contentclass</d:Key>
          <d:Value>STS_ListItem_DocumentLibrary</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>PictureThumbnailURL</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>ServerRedirectedURL</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>ServerRedirectedEmbedURL</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>ServerRedirectedPreviewURL</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>FileExtension</d:Key>
          <d:Value>txt</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>ContentTypeId</d:Key>
          <d:Value>0x01010027E858607844AC42AD371DFAA2B2557C</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>ParentLink</d:Key>
          <d:Value>http://url/DocLib/北方城市</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>ViewsLifeTime</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>ViewsRecent</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>SectionNames</d:Key>
          <d:Value/>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>SectionIndexes</d:Key>
          <d:Value/>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>SiteLogo</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>SiteDescription</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>deeplinks</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>importance</d:Key>
          <d:Value>0</d:Value>
          <d:ValueType>Edm.Int64</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>SiteName</d:Key>
          <d:Value>http://url</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>IsDocument</d:Key>
          <d:Value>true</d:Value>
          <d:ValueType>Edm.Boolean</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>LastModifiedTime</d:Key>
          <d:Value>2013-08-21T02:22:46.0000000Z</d:Value>
          <d:ValueType>Edm.DateTime</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>FileType</d:Key>
          <d:Value>txt</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>IsContainer</d:Key>
          <d:Value>false</d:Value>
          <d:ValueType>Edm.Boolean</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>WebTemplate</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>SecondaryFileExtension</d:Key>
          <d:Value>txt</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>docaclmeta</d:Key>
          <d:Value m:null="true"/>
          <d:ValueType>Null</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>OriginalPath</d:Key>
          <d:Value>http://url/DocLib/北方城市/北京.txt</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>PartitionId</d:Key>
          <d:Value>0c37852b-34d0-418e-91c6-2ac25af4be5b</d:Value>
          <d:ValueType>Edm.Guid</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>UrlZone</d:Key>
          <d:Value>1</d:Value>
          <d:ValueType>Edm.Int32</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>AAMEnabledManagedProperties</d:Key>  <d:Value>AttachmentURI;deeplinks;DefaultEncodingURL;ExternalMediaURL;HierarchyUrl;OrgParentUrls;OrgUrls;OriginalPath;ParentLink;Path;PictureThumbnailURL;PictureURL;PublishingImage;recommendedfor;ServerRedirectedEmbedURL;ServerRedirectedPreviewURL;ServerRedirectedURL;SiteLogo;SitePath;SPSiteURL;UserEncodingURL</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>RenderTemplateId</d:Key>
          <d:Value>~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Default.js</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
        <d:element m:type="SP.KeyValue">
          <d:Key>piSearchResultId</d:Key>
          <d:Value>3_1</d:Value>
          <d:ValueType>Edm.String</d:ValueType>
        </d:element>
      </d:Cells>
    </d:element>
    复制代码

    4、解疑,我看到这个结果,很奇怪,为什么我的网站中有4条结果,REST返回了5条,详细查看每个SimpleDateRow发现,最后一个居然是之前做BCS测试的时候的结果,XML附后。 

    复制代码
    <d:element m:type="SP.KeyValue">
    <d:Key>Path</d:Key>
    <d:Value>bdc3://blobdatacontent_blobdatacontent/Default/00000000%252D0000%252D0000%252D0000%252D000000000000/1394/BlobDataContent/1396?s_id=iAwAAAA==&s_ce=048g24810001020408000h20005s</d:Value>
    <d:ValueType>Edm.String</d:ValueType>
    </d:element>
    复制代码

    三、   Get 方式 - XML调用实例

    1、  调用效果图,如下:

    2、  后台方法:

    复制代码
     1 public void gvDateBind()
     2 {
     3     string keywords = "'" + System.Web.HttpUtility.UrlEncode(tbKeyWord.Text) + "'";
     4     string strRes = "http://url/_api/search/query?querytext=" + keywords;
     5 
     6     WebClient wc = new WebClient();
     7     wc.Encoding = System.Text.Encoding.UTF8;
     8     NetworkCredential nc = new NetworkCredential("username", "password", "ad");
     9     wc.Credentials = nc;
    10     string str = wc.DownloadString(strRes);
    11 
    12     XmlDocument doc = new XmlDocument();
    13     doc.LoadXml(str);
    14     XmlNodeList xnodelist = doc.GetElementsByTagName("d:Rows");
    15     XmlNode node = xnodelist[0];
    16 
    17     DataTable dt = new DataTable();
    18     dt.Columns.Add("标题");
    19     dt.Columns.Add("作者");
    20     dt.Columns.Add("描述");
    21     dt.Columns.Add("链接");
    22 
    23     XmlNodeList xlist = node.ChildNodes;
    24 
    25     foreach (XmlNode xnode in xlist)
    26     {
    27         XmlNodeList nn = xnode.ChildNodes[0].ChildNodes;
    28         DataRow dr = dt.NewRow();
    29 
    30         foreach (XmlNode nnode in nn)
    31         {
    32             switch (nnode.ChildNodes[0].InnerText)
    33             {
    34                 case "Title":
    35                     dr["标题"] = nnode.ChildNodes[1].InnerText;
    36                     break;
    37                 case "Author":
    38                     dr["作者"] = nnode.ChildNodes[1].InnerText;
    39                     break;
    40                 case "HitHighlightedSummary":
    41                     dr["描述"] = nnode.ChildNodes[1].InnerText;
    42                     break;
    43                 case "Path":
    44                     dr["链接"] = nnode.ChildNodes[1].InnerText;
    45                     break;
    46             }
    47         }
    48         dt.Rows.Add(dr);
    49     }
    50 
    51     gvSearchResult.DataSource = dt;
    52     gvSearchResult.DataBind();
    53 }
    复制代码

     四、   POST方式 - JSON调用实例

    1、调用结果显示

    2、核心代码

    复制代码
    $.ajax(
                   {
                       url: http://url/_api/search/postquery,
                       type: "Post",
                       dataType: "application/json;odata=verbose",
                       data: JSON.stringify({
                           'request': {
                               'Querytext': queryText,
                               'StartRow': 1,
                               'RowLimit': 8,
                               'SelectProperties': {
                                   'results': ['Title', 'ContentSource', 'DisplayAuthor', 'Path']
                               },
                               'TrimDuplicates': true,
                               'Refiners': 'companies,contentclass,FileType(filter=6/0/*)',
                               //'RefinementFilters': { 'results': ['filetype:equals("txt")'] }
                           }
                       }),
                       headers: {
                           "accept": "application/json;odata=verbose",
                           "content-type": "application/json;odata=verbose",
                           "X-RequestDigest": xRequestDigest
                       },
                       complete: ProcessSearchResult
                   });
    复制代码

    注:本来自己想写个调用JSON的博客,但是看到CSDN上有人写过了,自己就不写了,把最重要的那段代码贴给大家参考,大家有兴趣可以参考下,博客地址附后!

    五、   常用的查询参数:

    查询关键字(querytext

    http://server/_api/search/query?querytext='sharepoint'

    JSON实例:

    复制代码
    {
    
    '__metadata' : {'type' : 'Microsoft.Office.Server.Search.REST.SearchRequest'},
    
    'Querytext' : 'sharepoint'
    
    }
    复制代码

    起始行(StartRow

    http://server/_api/search/query?querytext='sharepoint'&startrow=10

    JSON实例:

    复制代码
    {
    
    '__metadata' : {'type' : 'Microsoft.Office.Server.Search.REST.SearchRequest'},
    
    'Querytext' : 'sharepoint',
    
    'StartRow' : '10'
    
    }
    复制代码

    返回行限制(RowLimit

    http://server/_api/search/query?querytext='sharepoint'&rowlimit=30

    JSON实例:

    复制代码
    {
    
    '__metadata' : {'type' : 'Microsoft.Office.Server.Search.REST.SearchRequest'},
    
    'Querytext' : 'sharepoint',
    
    'RowLimit' : '30'
    
    }
    复制代码

    选择属性(SelectProperties

    http://server/_api/search/query?querytext='sharepoint'&selectproperties='Title,Author'

    JSON实例:

    复制代码
    {
    
    '__metadata' : {'type' : 'Microsoft.Office.Server.Search.REST.SearchRequest'},
    
    'Querytext' : 'sharepoint',
    
    'SelectProperties' : {
    
        'results' : [
    
              'Title,
    
              Author'
    
              ]
    
    }
    
    }
    复制代码

    扩展名(RefinementFilters

    http://server/_api/search/query?querytext='sharepoint'&refinementfilters='fileExtension:equals("docx")'

    JSON实例:

    复制代码
    {
    
    '__metadata' : {'type' : 'Microsoft.Office.Server.Search.REST.SearchRequest'},
    
    'Querytext' : 'sharepoint',
    
    'RefinementFilters' : {
    
    'results' : ['fileExtension:equals("docx")']
    
    }
    
    }
    复制代码

    排序(SortList

    http://server/_api/search/query?querytext='sharepoint'&sortlist='rank:descending,modifiedby:ascending'

    JSON实例:

    复制代码
    {
    
    '__metadata' : {'type':'Microsoft.Office.Server.Search.REST.SearchRequest'},
    
    'Querytext' : 'sharepoint',
    
    'SortList' :
    
    {
    
        'results' : [
    
            {
    
                    'Property':'Created',
    
                    'Direction': '0'
    
            },
    
            {
    
                    'Property':'FileExtension',
    
                    'Direction': '1'
    
            }
    
        ]
    
    }
    
    }
    复制代码

    返回总长度(SummaryLength

    http://server/_api/search/query?querytext='sharepoint'&summarylength=150

    JSON实例:

    复制代码
    {
    
    '__metadata':{'type':'Microsoft.Office.Server.Search.REST.SearchRequest'},
    
    'Querytext' : 'sharepoint',
    
    'Summarylength' : '150'
    
    }
    复制代码

    参考链接:

    1、SharePoint Search REST API overview

    http://msdn.microsoft.com/en-us/library/jj163876.aspx

    2、Jquery(Ajax) 调用 SharePoint 2013 Search Rest API 并使用Josn反回结果并简单显示

    http://blog.csdn.net/abrahamcheng/article/details/8470834

  • 相关阅读:
    ORB-SLAM(五)优化
    ORB-SLAM(四)追踪
    ORB-SLAM(三)地图初始化
    SVM(支持向量机)的一点理解
    ORB-SLAM(二)性能
    ORB-SLAM(一)简介
    支持高并发的IIS Web服务器常用设置
    微信JS SDK Demo
    C#开发微信门户及应用-使用地理位置扩展相关应用
    DropdownListFor无法正确绑定值-同名问题
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/3602361.html
Copyright © 2011-2022 走看看