Introduction
This blog post demonstrates a sample that queries against to a specific site in my SharePoint Online portal.
Context
SharePoint Server 2013 supports building search queries in 2 languages: Keyword Query Language (KQL) and FAST Query Language (FQL). Yet, KQL is selected default in SP2013.
The solution demonstrated below searches a SharePoint site by passing a KQL query and consists of the following components:
- – SharePoint site: My Office365(o365) SharePoint Online(SPO) site where:
- – Search Service Application (SSA) functional. For details, you can visit Create and configure a Search service application in SharePoint Server 2013
- – Managed Metadata Service (MMS) enabled and manage terms created. I have created a term set named Colors in my term store with these values: {Blue, Green, Orange, Purple, Red, Yellow}. Details, you can visit Overview of managed metadata service applications in SharePoint Server 2013
- – A result source defined for a site (or sub site). I have outlined its configuration steps just below.
– Console application – the client: where I use Client Side Object Model (CSOM) search API for querying my SPO site with managed properties.
Steps for configuring the result source
Steps are really straight-forward here; once signed in, you can follow the steps displayed below.
Note that:
- Use of a result source will benefit you from search scope perspective. The client API uses its id (Guid) which can be obtained from the browser as highlighted in the last picture above.
Implementation – source code
First it creates the client context with my own credentials.
It builds KeywordQuery object’s QueryText property as {Property}:{theValue} and then constructs SearchExecutor and call its ExecuteQuery method passing the keyword query object just created.
It sets SourceId property of KeywordQuery object to the result source id.
Then it displays the results on the screen
Query related source code shared below.
1: using System;
2: using Microsoft.SharePoint.Client;
3: using Microsoft.SharePoint.Client.Search;
4: using Microsoft.SharePoint.Client.Search.Query;
5:
6: using SharePointContext;
7:
8: namespace Console1
9: {
10: class Program
11: {
12: static ClientContext _clientContext;
13:
14: static void Main(string[] args)
15: {
16: try
17: {
18: CloudClientContext ccc = CloudClientContext.Instance;
19: ccc.Password = System.Configuration.ConfigurationManager.AppSettings["sp_pwd"];
20: ccc.UserName = System.Configuration.ConfigurationManager.AppSettings["sp_tenant"];
21: ccc.SiteUrl = System.Configuration.ConfigurationManager.AppSettings["sp_siteUrl"];
22:
23: _clientContext = ccc.GetContext();
24:
25: DoSearch();
26: }catch (Exception ex)
27: {
28: string str = ex.Message;
29: }
30: }
31:
32: static void DoSearch()
33: {
34: KeywordQuery kq = new KeywordQuery(_clientContext);
35: kq.QueryText = GetKeywords();
36: kq.SourceId = Guid.Parse(System.Configuration.ConfigurationManager.AppSettings["sp_sitesourceId"]);
37:
38: SearchExecutor searchExecutor = new SearchExecutor(_clientContext);
39:
40: ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(kq);
41:
42: _clientContext.ExecuteQuery();
43:
44: foreach (var resultRow in results.Value[0].ResultRows)
45: {
46: Console.WriteLine("#{0}:{1}rn ({2})t {3}",
47: resultRow["piSearchResultId"].ToString().Split('_')[0],
48: resultRow["Title"],
49: resultRow["Path"],
50: resultRow["Write"]);
51: }
52:
53: Console.ReadLine();
54: }
55:
56: static string GetKeywords()
57: {
58: return string.Format("'Color':'{0}'","Blue");
59: //return string.Format("author:{0} AND filetype:{1} OR 'Color':'{2}'", "Mecit Atmaca", "docx", "Orange"); //more granular search
60: }
61: }
62: }
You must log in to post a comment.