前言:在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></d:Value>
<d:ValueType>Edm.Int64</d:ValueType>
</d:element>
<d:element m:type="SP.KeyValue">
<d:Key>WorkId</d:Key>
<d:Value></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></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>--21T02::.0000000Z</d:Value>
<d:ValueType>Edm.DateTime</d:ValueType>
</d:element>
<d:element m:type="SP.KeyValue">
<d:Key>CollapsingStatus</d:Key>
<d:Value></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></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>--21T02::.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></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、  后台方法:

 public void gvDateBind()
{
string keywords = "'" + System.Web.HttpUtility.UrlEncode(tbKeyWord.Text) + "'";
string strRes = "http://url/_api/search/query?querytext=" + keywords; WebClient wc = new WebClient();
wc.Encoding = System.Text.Encoding.UTF8;
NetworkCredential nc = new NetworkCredential("username", "password", "ad");
wc.Credentials = nc;
string str = wc.DownloadString(strRes); XmlDocument doc = new XmlDocument();
doc.LoadXml(str);
XmlNodeList xnodelist = doc.GetElementsByTagName("d:Rows");
XmlNode node = xnodelist[]; DataTable dt = new DataTable();
dt.Columns.Add("标题");
dt.Columns.Add("作者");
dt.Columns.Add("描述");
dt.Columns.Add("链接"); XmlNodeList xlist = node.ChildNodes; foreach (XmlNode xnode in xlist)
{
XmlNodeList nn = xnode.ChildNodes[].ChildNodes;
DataRow dr = dt.NewRow(); foreach (XmlNode nnode in nn)
{
switch (nnode.ChildNodes[].InnerText)
{
case "Title":
dr["标题"] = nnode.ChildNodes[].InnerText;
break;
case "Author":
dr["作者"] = nnode.ChildNodes[].InnerText;
break;
case "HitHighlightedSummary":
dr["描述"] = nnode.ChildNodes[].InnerText;
break;
case "Path":
dr["链接"] = nnode.ChildNodes[].InnerText;
break;
}
}
dt.Rows.Add(dr);
} gvSearchResult.DataSource = dt;
gvSearchResult.DataBind();
}

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': ,
'RowLimit': ,
'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' : ''

}

返回行限制(RowLimit

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

JSON实例:

{

'__metadata' : {'type' : 'Microsoft.Office.Server.Search.REST.SearchRequest'},

'Querytext' : 'sharepoint',

'RowLimit' : ''

}

选择属性(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': ''

        },

        {

                'Property':'FileExtension',

                'Direction': ''

        }

    ]

}

}

返回总长度(SummaryLength

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

JSON实例:

{

'__metadata':{'type':'Microsoft.Office.Server.Search.REST.SearchRequest'},

'Querytext' : 'sharepoint',

'Summarylength' : ''

}

参考链接:

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

SharePoint 2013 Search REST API 使用示例的更多相关文章

  1. SharePoint 2013 Search 配置总结

    前言:SharePoint 2013集成了Fast搜索以后,搜索的配置有了些许改变,自己在配置过程中,也记录下了一些入门的东西,希望能够对大家有所帮助. 1.配置搜索服务,首先需要启用搜索功能,基本思 ...

  2. 配置SharePoint 2013 Search 拓扑结构

    在单台服务器上安装了 SharePoint Server 2013,并且创建了具有默认搜索拓扑的 Search Service 应用程序.在默认搜索拓扑中,所有搜索组件都位于承载管理中心的服务器上.S ...

  3. 修复SharePoint 2013 Search 拓扑错误

    Problem 当创建和配置SharePoint 2013 Search Service Application成功之后,进入详细配置页后,在Search Application Topology节点 ...

  4. SharePoint 2013: Search Architecture in SPC202

    http://social.technet.microsoft.com/wiki/contents/articles/15989.sharepoint-2013-search-architecture ...

  5. 探索 SharePoint 2013 Search功能

    转载: http://www.cnblogs.com/OceanEyes/p/SharePont-2013-Search-Develop.html SharePoint 2013的搜索功能很强大,特别 ...

  6. 转载 SharePoint 2013 Search功能

    转载原出处: http://www.cnblogs.com/OceanEyes/p/SharePont-2013-Search-Develop.html 阅读目录 启用Search Service A ...

  7. Customize the SharePoint 2013 search experience with a Content Enrichment web service

    Did you ever wish you had more control over how your content is indexed and presented as search resu ...

  8. SharePoint 2013 网站搜索规则的使用示例

    前言 SharePoint 2013搜索中,有一个非常好用的细化搜索结果的功能,就是“查询规则”.可以通过对于某些特定查询时,起到细化显示结果的作用.下面,我们简单的介绍一下该功能的使用和效果. 1. ...

  9. SharePoint 2013 调用WCF服务简单示例

    内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...

随机推荐

  1. 我为NET狂-----大前端专帖

    http://dnt.dkill.net/Article/Detail/321 本来前端的东西是不想开个专贴的,这样网友容易产生依赖,前端的东西看看书,平时仿照几个网站,遇到问题再调调增加点经验,基本 ...

  2. Python 模块学习:os模块

    一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...

  3. Android开发输入法遮盖屏幕底部按钮

    方法一: 在你的activity中的oncreate中setContentView之前写上这个代码: getWindow().setSoftInputMode(WindowManager.Layout ...

  4. Android 裁剪图片为圆形图片

    转自http://blog.csdn.net/kkmike999/article/details/16359713 /** * 转换图片成圆形 * * @param bitmap * 传入Bitmap ...

  5. HTTP的长连接和短连接——Node上的测试

        本文主要从实践角度介绍长.短连接在TCP层面的表现,借助Node.JS搭建后台服务,使用WinHTTP.Ajax做客户端请求测试,最后简单涉及WebSocket.     关键字:长连接.短连 ...

  6. MVC实用架构设计(三)——EF-Code First(5):二级缓存

    前言 今天我们来谈谈EF的缓存问题. 缓存对于一个系统来说至关重要,但是是EF到版本6了仍然没有见到有支持查询结果缓存机制的迹象.EF4开始会把查询语句编译成存储过程缓存在Sql Server中,据说 ...

  7. JavaScript操作Cookie

    在Web开发中,我们经常使用Cookie保存一些不是非常敏高的数据.比如“下次自动登录”,“广告显示”等功能.定义是:某些网站为了辨别用户身份而存储在用户本地终端(主要是浏览器)上的数据.定义域RFC ...

  8. Web前端上万字的知识总结

    下面是自己学HTML+DIV+CSS+JS时的学习笔记,给大家分享以下,相互学习.大二时候寒假在家无聊的时候想做点事,总结了一下web前端基础的东西,下面的每个字都是自己手敲的. 1.<html ...

  9. 如何用Pivot实现行列转换

    在Oracle中,如果要实现行列转换,较为常见的是用DECODE和CASE语句.对于简单的行列转行,DECODE和CASE语句尚能应付.在逻辑比较复杂,分组聚合较多的场景中,DECODE和CASE语句 ...

  10. 【记录】WCF IIS 404

    WCF IIS 发布报"404错误": 修改 Web.config 如下: <system.webServer> <handlers> <remove ...