SharePoint 2013 Search REST API 使用示例

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

  前言:在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>
View Code

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 }

Get方式-Xml调用示例

 四、   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

目录
打赏
0
0
0
0
6
分享
相关文章
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
9天前
|
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
25 12
淘宝商品详情(item get)API接口系列,示例说明参考
淘宝商品详情(item_get)API接口是淘宝开放平台(Taobao Open Platform)提供的一个重要接口,允许开发者通过HTTP请求获取淘宝商品的详细信息。以下是对该接口系列的示例说明参考
淘宝评论API接口操作步骤详解,代码示例参考
淘宝评论API接口是淘宝开放平台提供的一项服务,通过该接口,开发者可以访问商品的用户评价和评论。这些评论通常包括评分、文字描述、图片或视频等内容。商家可以利用这些信息更好地了解消费者的需求和偏好,优化产品和服务。同时,消费者也可以从这些评论中获得准确的购买参考,做出更明智的购买决策。
|
1月前
|
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
64 11
探究亚马逊国际获得AMAZON商品详情 API 接口功能、作用与实际应用示例
亚马逊提供的Amazon Product Advertising API或Selling Partner API,使开发者能编程访问亚马逊商品数据,包括商品标题、描述、价格等。支持跨境电商和数据分析,提供商品搜索和详情获取等功能。示例代码展示了如何使用Python和boto3库获取特定商品信息。使用时需遵守亚马逊政策并注意可能产生的费用。
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
Amazon商品详情API,json数据格式示例参考
亚马逊商品详情API接口返回的JSON数据格式通常包含丰富的商品信息,以下是一个简化的JSON数据格式示例参考
电商拍立淘按图搜索API接口,数据格式示例
电商拍立淘按图搜索API接口系列为电商平台和购物应用提供了强大的图像搜索功能,以下是其文档说明的详细参考
携程API接口系列,酒店景点详情请求示例参考
携程API接口系列涵盖了酒店预订、机票预订、旅游度假产品预订、景点门票预订等多个领域,其中酒店和景点详情请求是较为常用的功能。以下提供酒店和景点详情请求的示例参考

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等