Tuesday, May 6, 2014

Search feature


  • Use KEYWORDQUERY class for full trust solutions; must execute directly on SharePoint farm; uses same KQL syntax.
  • Set query with KeywordText property; use new SearchExecutor class to query Filter result tables with Filter(); Great for: managed code on SharePoint farm.
using (SPSite siteCollection = new SPSite("http://myserver/mysitecollection"))
{
   KeywordQuery keywordQuery = new KeywordQuery(siteCollection);
   keywordQuery.QueryText = "SharePoint";
   
  SearchExecutor searchExecutor = new SearchExecutor();
  ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery);
  var resultTables = resultTableCollection.Filter("TableType", KnownTableTypes.ReleventResults);
  var resultTable = resultTables.FirstOrDefault();
  DataTable dataTable = resultTable.Table;
}

Querying from the Client Managed CSOM 
great for: provider hosted apps; remote .NET Application
Uses similar KeywordQuery and SearchExecutor classes; required a client context.
References:
    Microsoft.SharePoint.Client.dll
    Microsoft.SharePoint.Client.Runtime.dll
    Microsoft.SharePoint.Client.Search.dll

using (ClientContext clientContext = new ClientContext("http://mysharepointsite"))
{
   KeywordQuery keywordQuery = new KeywordQuery(clientContext);
   keywordQuery.QueryText = "SharePoint";

  SearchExecutor searchExecutor = new SearchExecutor(clientContext);
  
  ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery);
  clientContext.ExecuteQuery();

   foreach(var resultRow in results.Value[0].ResultRows)
  {
      Console.WriteLine("{0}: {1} ({2})", resultRow["Title"], resultRow["Path"], resultRow["Write"]); 
  }
  Console.ReadLine();
}

Searching with JavaScript CSOM

Uses similar KeywordQuery and SearchExecutor objects; results easier to parse than REST; REST is still preferred method.


var keywordQuery = new Microsoft.ShaePoint.Client.Search.Query.KeywordQuery(context);
keywordQuery.set_queryText("SharePoint");

var searchExecutor = new Microsoft.SharePoint.Client.Search.Query.SearchExecutor(context);
results = searchExecutor.executeQuery(keywordQuery);
context.executeQueryAsync(onQuerySuccess, onQueryFail);

Querying from the client REST

/_api/search/query
use querytext parameter to query; enclose query in single quotes

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

Issues: hard to retrieve extended fields; use the correct field name still couldn't get their values back.

REST + Javascript



No comments:

Post a Comment