private static string[] GetActorIds(ClientContext clientContext, string[] siteMembersEmails) { StringBuilder searchQueryText = new StringBuilder(); foreach (string userEmail in siteMembersEmails) { if (searchQueryText.Length > 0) { searchQueryText.Append(" OR "); } searchQueryText.AppendFormat("UserName:{0}", userEmail); } KeywordQuery searchQuery = new KeywordQuery(clientContext); searchQuery.QueryText = searchQueryText.ToString(); searchQuery.SelectProperties.Add("DocId"); searchQuery.SourceId = new Guid("b09a7990-05ea-4af9-81ef-edfab16c4e31"); searchQuery.RowLimit = 100; SearchExecutor searchExecutor = new SearchExecutor(clientContext); ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(searchQuery); clientContext.ExecuteQuery(); List<string> actorIds = new List<string>(results.Value[0].ResultRows.Count()); foreach (var row in results.Value[0].ResultRows) { actorIds.Add(row["DocId"].ToString()); } return actorIds.ToArray(); }
private void RunSearch(string searchText) { SharePointContext spContext = SharePointContextProvider.Current.GetSharePointContext(Context); Uri hostWeb = spContext.SPHostUrl; using (var context = spContext.CreateUserClientContextForSPHost()) { //Get current user User currentUser = context.Web.CurrentUser; context.Load(currentUser); context.ExecuteQuery(); //Get current user's tasks KeywordQuery keywordQuery = new KeywordQuery(context); keywordQuery.QueryText = searchText; var searchExecutor = new SearchExecutor(context); ClientResult<ResultTableCollection> resultsCollection = searchExecutor.ExecuteQuery(keywordQuery); context.ExecuteQuery(); //Bind them to the grid IEnumerable<IDictionary<string, object>> results = resultsCollection.Value[0].ResultRows; List<SearchResult> tasks = new List<SearchResult>(); foreach (var result in results) { SearchResult searchResult = new SearchResult(); searchResult.Title = result["Title"].ToString(); searchResult.Path = result["Path"].ToString(); tasks.Add(searchResult); } SearchResultsView.DataSource = tasks; SearchResultsView.DataBind(); } }
private void QuerySearchEngineRecursive(ClientContext ctx, string kql, Action<IDictionary<string, object>> procesResultRow, int startRow) { Logger.Verbose($"Fetching results in range {startRow} to {startRow + BatchSize + 1}"); var executor = new SearchExecutor(ctx); var results = executor.ExecuteQuery( new KeywordQuery(ctx) { QueryText = kql, StartRow = startRow, RowLimit = BatchSize, // beware that the TrimDuplicates setting is true by default and that its behavior may be somewhat // counter-intuitive as it removes search results which are similar to a some degree. This implies // search will treat some results as similar even though they're not, leaving out distinct results. // http://sharepoint.stackexchange.com/questions/14460/sharepoint-2010-search-when-is-a-document-a-duplicate TrimDuplicates = false }); ctx.ExecuteQuery(); var rows = results.Value[0]; Logger.Verbose($"Result contains {rows.RowCount} rows"); rows.ResultRows.ToList().ForEach(procesResultRow); if (rows.RowCount > 0) { QuerySearchEngineRecursive(ctx, kql, procesResultRow, startRow + BatchSize); } }
private void RunSearch(string searchText) { SharePointContext spContext = SharePointContextProvider.Current.GetSharePointContext(Context); Uri hostWeb = spContext.SPHostUrl; using (var context = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity)) { //Get current user User currentUser = context.Web.CurrentUser; context.Load(currentUser); context.ExecuteQuery(); //Get current user's tasks KeywordQuery keywordQuery = new KeywordQuery(context); keywordQuery.QueryText = searchText; var searchExecutor = new SearchExecutor(context); ClientResult<ResultTableCollection> resultsCollection = searchExecutor.ExecuteQuery(keywordQuery); context.ExecuteQuery(); //Bind them to the grid IEnumerable<IDictionary<string, object>> results = resultsCollection.Value[0].ResultRows; List<Task> tasks = new List<Task>(); foreach (var result in results) { Task task = new Task(); task.Title = result["Title"].ToString(); task.Path = result["Path"].ToString(); tasks.Add(task); } SearchResultsView.DataSource = tasks; SearchResultsView.DataBind(); } }
private void SelectSharePointSite_Load( object sender, EventArgs e ) { if ( _ctx == null ) { throw new ArgumentException( "You must set the SharePoint RootSite Url before opening this form." ); } KeywordQuery kwq = new KeywordQuery( _ctx ) { QueryText = "contentclass =\"STS_Web\" OR contentclass=\"STS_Site\"" }; SearchExecutor seExecute = new SearchExecutor( _ctx ); var results = seExecute.ExecuteQuery( kwq ); _ctx.ExecuteQuery(); lstSharePointSites.DisplayMember = "SiteName"; lstSharePointSites.ValueMember = "Path"; lstSharePointSites.DataSource = ( from r in results.Value[ 0 ].ResultRows where !r[ "Author" ].ToString().Equals( "System Account" ) && !string.IsNullOrEmpty( r[ "Author" ].ToString() ) && !r[ "Path" ].ToString().Contains( "-my" ) select new { SiteName = r[ "Title" ] + " -|- " + r[ "Author" ], Path = r[ "Path" ] } ).ToArray(); this.Closed += ( s, args ) => { _ctx.Dispose(); }; }
public static List <UserInfo> Search(string query) { using (ClientContext clientContext = new ClientContext(SharePointHelper.SearchUrl)) { ClientResult <ResultTableCollection> results; try { KeywordQuery keywordQuery = new KeywordQuery(clientContext); keywordQuery.QueryText = query + "*"; keywordQuery.TrimDuplicates = true; keywordQuery.SourceId = Guid.Parse(SharePointHelper.SourceId); SearchExecutor searchExecutor = new SearchExecutor(clientContext); results = searchExecutor.ExecuteQuery(keywordQuery); clientContext.ExecuteQuery(); } catch (MessageSecurityException ex) { results = new ClientResult <ResultTableCollection>(); } var users = new List <UserInfo>(); foreach (var result in results.Value[0].ResultRows) { if (result != null) { if (result["PreferredName"] != null && result["AccountName"] != null) { //var user = GetUser(result["AccountName"].ToString(), false, false); var user = new UserInfo() { DisplayName = result["PreferredName"].ToString(), Upn = result["AccountName"].ToString() }; if (!users.Contains(user)) { users.Add(user); } } } } return(users); } }
protected override void ExecuteCmdlet() { var keywordQuery = new KeywordQuery(ClientContext); // Construct query to execute var query = "contentclass:STS_Site"; if(!string.IsNullOrEmpty(Query)) { query = query + " AND " + Query; } keywordQuery.QueryText = query; keywordQuery.RowLimit = MaxResults; keywordQuery.StartRow = StartRow; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SortList.Add("SPSiteUrl", SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(ClientContext); // Important to avoid trimming "similar" site collections keywordQuery.TrimDuplicates = false; ClientResult<ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); ClientContext.ExecuteQueryRetry(); var dynamicList = new List<dynamic>(); if (results != null) { if (results.Value[0].RowCount > 0) { foreach (var row in results.Value[0].ResultRows) { dynamicList.Add( new { Title = row["Title"] != null ? row["Title"].ToString() : "", Url = row["SPSiteUrl"] != null ? row["SPSiteUrl"].ToString() : "", Description = row["Description"] != null ? row["Description"].ToString() : "", WebTemplate = row["WebTemplate"] != null ? row["WebTemplate"].ToString() : "" }); } } } WriteObject(dynamicList, true); }
public void HasKeywords_ShouldReturnTrue() { //Arrange IWebRequest webRequest = new WebRequestImplementation(); string[] keywords = new string[2] { ".net", "java" }; SearchExecutor searchExecutor = new SearchExecutor(webRequest, keywords); //Act var result = searchExecutor.HasKeywords(); //Assert result.Should().BeTrue(); }
public static string SearchSharepointSite(SharepointRequest request) { string token = request.AccessToken; string relativeUrl = Utility.GetServerRelativeUrl(request.Url, request.ServerRelativeUrl); ClientContext clientContext = GetClientContext(request); using (clientContext) { KeywordQuery keywordQuery = new KeywordQuery(clientContext); keywordQuery.ClientType = "ContentSearchRegular"; keywordQuery.StartRow = 0; keywordQuery.QueryText = "(Site:" + request.Url + ") AND ((contentclass=STS_Site) AND ((WebTemplate <>POLICYCTR) AND (WebTemplate <>POINTPUBLISHINGHUB) AND (WebTemplate <>POINTPUBLISHINGTOPIC) AND (-SPSiteUrl:personal)))"; StringCollection selectProperties = keywordQuery.SelectProperties; keywordQuery.TrimDuplicates = true; keywordQuery.StartRow = 0; keywordQuery.RowLimit = 50; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("Path"); keywordQuery.SelectProperties.Add("SiteName"); keywordQuery.SelectProperties.Add("SiteTitle"); keywordQuery.SelectProperties.Add("ContentTypeId"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("SPWebUrl"); keywordQuery.SelectProperties.Add("Type"); keywordQuery.TrimDuplicates = false; SearchExecutor searchExecutor = new SearchExecutor(clientContext); clientContext.ExecutingWebRequest += new EventHandler <WebRequestEventArgs>((s, e) => context_ExecutingWebRequest(s, e, token)); ClientResult <ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery); clientContext.ExecuteQuery(); List <SharepointRequest> spRequests = new List <SharepointRequest>(); foreach (var resultRow in results.Value[0].ResultRows) { SharepointRequest spRequest = new SharepointRequest(); string url = !string.IsNullOrEmpty(Convert.ToString(resultRow["SPSiteUrl"])) ? resultRow["SPSiteUrl"].ToString() : ""; spRequest.Url = url; spRequest.Name = !string.IsNullOrEmpty(Convert.ToString(resultRow["Title"])) ? resultRow["Title"].ToString() : ""; if (!string.IsNullOrEmpty(Convert.ToString(resultRow["Path"]))) { Uri uri = new Uri(resultRow["Path"].ToString()); string serverRelativeURL = uri.AbsolutePath; spRequest.ServerRelativeUrl = serverRelativeURL; } spRequests.Add(spRequest); } return(JsonHelper.ConvertToJson(spRequests)); } }
protected override void ExecuteCmdlet() { var keywordQuery = new KeywordQuery(ClientContext); // Construct query to execute var query = "contentclass:STS_Site"; if (!string.IsNullOrEmpty(Query)) { query = query + " AND " + Query; } keywordQuery.QueryText = query; keywordQuery.RowLimit = MaxResults; keywordQuery.StartRow = StartRow; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SortList.Add("SPSiteUrl", SortDirection.Ascending); var searchExec = new SearchExecutor(ClientContext); // Important to avoid trimming "similar" site collections keywordQuery.TrimDuplicates = false; var results = searchExec.ExecuteQuery(keywordQuery); ClientContext.ExecuteQueryRetry(); var dynamicList = new List <dynamic>(); if (results?.Value[0].RowCount > 0) { foreach (var row in results.Value[0].ResultRows) { dynamicList.Add( new { Title = row["Title"]?.ToString() ?? "", Url = row["SPSiteUrl"]?.ToString() ?? "", Description = row["Description"]?.ToString() ?? "", WebTemplate = row["WebTemplate"]?.ToString() ?? "" }); } } WriteObject(dynamicList, true); }
public async Task When_execution_always_fails_it_should_try_till_max_try_count() { var tryCount = 0; var maxTry = 5; var result = await SearchExecutor.Run((page) => { tryCount++; SearchResultDto searchResult = null; return(Task.FromResult(searchResult)); }, maxTry, 5, TimeSpan.FromMilliseconds(5)); Assert.AreEqual(maxTry, tryCount); Assert.IsEmpty(result); }
public async void LoadResults(string siteUrl, string keywords, string login, string mdp) { ObservableCollection<CortanaItem> cortanaResults = new ObservableCollection<CortanaItem>(); keywords = keywords.Trim('.').ToLower(); try { using (ClientContext context = new ClientContext(siteUrl)) { SharePointOnlineCredentials credentials = new SharePointOnlineCredentials(login, mdp); context.Credentials = credentials; KeywordQuery keywordQuery = new KeywordQuery(context); keywordQuery.QueryText = keywords; keywordQuery.SourceId = new Guid(SettingsValues.SourceId); keywordQuery.EnablePhonetic = true; keywordQuery.EnableStemming = true; keywordQuery.RowLimit = 100; SearchExecutor searchExecutor = new SearchExecutor(context); ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery); context.ExecuteQueryAsync().Wait(); foreach (var item in results.Value[0].ResultRows) { CortanaItem ci = new CortanaItem(); ci.Id = item["ID"] != null ? item["ID"].ToString() : string.Empty; ci.Title = item["Title"] != null ? item["Title"].ToString() : string.Empty; ci.LastModifiedDate = item["Modified"] != null ? item["Modified"].ToString() : string.Empty; ci.Url = item["Path"] != null ? item["Path"].ToString() : string.Empty; cortanaResults.Add(ci); } } LoadDataCompleted(cortanaResults); // Fire event DataLoadCompleted } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Erreur : " + ex.Message); LoadDataCompleted(null); } }
//gavdcodeend 20 //gavdcodebegin 21 static void SpCsCsomGetResultsSearch(ClientContext spCtx) { KeywordQuery keywordQuery = new KeywordQuery(spCtx); keywordQuery.QueryText = "Team"; SearchExecutor searchExecutor = new SearchExecutor(spCtx); ClientResult <ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery); spCtx.ExecuteQuery(); foreach (var resultRow in results.Value[0].ResultRows) { Console.WriteLine(resultRow["Title"] + " - " + resultRow["Path"] + " - " + resultRow["Write"]); } }
public async void LoadResults(string siteUrl, string keywords, string login, string mdp) { ObservableCollection <CortanaItem> cortanaResults = new ObservableCollection <CortanaItem>(); keywords = keywords.Trim('.').ToLower(); try { using (ClientContext context = new ClientContext(siteUrl)) { SharePointOnlineCredentials credentials = new SharePointOnlineCredentials(login, mdp); context.Credentials = credentials; KeywordQuery keywordQuery = new KeywordQuery(context); keywordQuery.QueryText = keywords; keywordQuery.SourceId = new Guid(SettingsValues.SourceId); keywordQuery.EnablePhonetic = true; keywordQuery.EnableStemming = true; keywordQuery.RowLimit = 100; SearchExecutor searchExecutor = new SearchExecutor(context); ClientResult <ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery); context.ExecuteQueryAsync().Wait(); foreach (var item in results.Value[0].ResultRows) { CortanaItem ci = new CortanaItem(); ci.Id = item["ID"] != null ? item["ID"].ToString() : string.Empty; ci.Title = item["Title"] != null ? item["Title"].ToString() : string.Empty; ci.LastModifiedDate = item["Modified"] != null ? item["Modified"].ToString() : string.Empty; ci.Url = item["Path"] != null ? item["Path"].ToString() : string.Empty; cortanaResults.Add(ci); } } LoadDataCompleted(cortanaResults); // Fire event DataLoadCompleted } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Erreur : " + ex.Message); LoadDataCompleted(null); } }
static void Main(string[] args) { using (SPSite siteCollection = new SPSite("http://sp2010/sites/test")) { KeywordQuery keywordQuery = new KeywordQuery(siteCollection); keywordQuery.QueryText = "SharePoint"; keywordQuery.SortList.Add("Author", SortDirection.Ascending); keywordQuery.SortList.Add("Size", SortDirection.Descending); SearchExecutor searchExecutor = new SearchExecutor(); ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery); var resultTables = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults); var resultTable = resultTables.FirstOrDefault(); DataTable dataTable = resultTable.Table; } }
private ClientResult <ResultTableCollection> ProcessQuery(ClientContext ctx, string keywordQueryValue) { KeywordQuery keywordQuery = new KeywordQuery(ctx); keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; keywordQuery.StartRow = 0; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SortList.Add("SPSiteUrl", Microsoft.SharePoint.Client.Search.Query.SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(ctx); ClientResult <ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); ctx.ExecuteQuery(); return(results); }
protected override void ExecuteCmdlet() { int startRow = StartRow; int rowLimit = MaxResults; if (All.IsPresent) { startRow = 0; rowLimit = 500; } int currentCount = 0; var dynamicList = new List <dynamic>(); do { var keywordQuery = GetKeywordQuery(); keywordQuery.StartRow = startRow; keywordQuery.RowLimit = rowLimit; var searchExec = new SearchExecutor(ClientContext); var results = searchExec.ExecuteQuery(keywordQuery); ClientContext.ExecuteQueryRetry(); if (results?.Value[0].RowCount > 0) { var result = results.Value[0]; currentCount = result.ResultRows.Count(); foreach (var row in result.ResultRows) { dynamicList.Add( new { Title = row["Title"]?.ToString() ?? "", Url = row["SPSiteUrl"]?.ToString() ?? "", Description = row["Description"]?.ToString() ?? "", WebTemplate = row["WebTemplate"]?.ToString() ?? "" }); } } startRow += rowLimit; } while (currentCount == rowLimit && All.IsPresent); WriteObject(dynamicList, true); }
public async Task When_execution_fails_it_should_continue_after_sucessful_try() { var housesPerPage = GenerateHouses(); var tryCountForFailingPage = 0; var failCount = 2; var failingPage = 2; SearchResultDto Search(int page) { if (page == failingPage) { tryCountForFailingPage++; if (tryCountForFailingPage < failCount) { return(null); } } return(new SearchResultDto { Paging = new PagingDto() { CurrentPage = page, TotalPages = housesPerPage.Count }, Houses = housesPerPage[page] }); } var tryCount = 0; var maxTry = failCount; var result = await SearchExecutor.Run((page) => { tryCount++; return(Task.FromResult(Search(page))); }, maxTry, 3, TimeSpan.FromMilliseconds(5)); Assert.AreEqual(housesPerPage.Count + failCount - 1, tryCount); Assert.AreEqual(housesPerPage.SelectMany(p => p.Value.Select(h => House.FromDto(h))), result); }
private static int ProcessQuery(this Web web, string keywordQueryValue, List <SiteEntity> sites, KeywordQuery keywordQuery) { int totalRows = 0; keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; // keywordQuery.StartRow = startRow; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("Path"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SelectProperties.Add("IndexDocId"); // Change : Include IndexDocId property to get the IndexDocId for paging keywordQuery.SortList.Add("IndexDocId", SortDirection.Ascending); // Change : Sort by IndexDocId SearchExecutor searchExec = new SearchExecutor(web.Context); // Important to avoid trimming "similar" site collections keywordQuery.TrimDuplicates = false; ClientResult <ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); web.Context.ExecuteQueryRetry(); if (results != null) { if (results.Value[0].RowCount > 0) { totalRows = results.Value[0].TotalRows; foreach (var row in results.Value[0].ResultRows) { sites.Add(new SiteEntity { Title = row["Title"] != null ? row["Title"].ToString() : "", Url = row["Path"] != null ? row["Path"].ToString() : "", Description = row["Description"] != null ? row["Description"].ToString() : "", Template = row["WebTemplate"] != null ? row["WebTemplate"].ToString() : "", IndexDocId = row["DocId"] != null ? double.Parse(row["DocId"].ToString()) : 0, // Change : Include IndexDocId in the sites List }); } } } return(totalRows); }
static void Main(string[] args) { string SPSiteAdress = ConfigurationManager.AppSettings["SPSiteAddress"].ToString(); Console.WindowWidth = 150; Console.WindowHeight = 50; Console.WriteLine(SPSiteAdress); SPSite objSite = new SPSite(SPSiteAdress); //Replace with yours SPWeb objTargetWeb = objSite.OpenWeb(SPSiteAdress); ResultType resultType = ResultType.RelevantResults; Console.WriteLine("type your query...."); string strQuery = Console.ReadLine(); Console.WriteLine("type your ranking model ID...."); string rankikgModelId = Console.ReadLine(); KeywordQuery keywordQuery = new KeywordQuery(objSite); SearchExecutor searchExecutor = new SearchExecutor(); keywordQuery.QueryText = strQuery; keywordQuery.ResultTypes = resultType; //This is where we specify the custom ranking model to use. keywordQuery.RankingModelId = rankikgModelId; ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery); ResultTable resultTable = resultTableCollection[resultType]; int index = 0; string separator = " "; while (resultTable.Read()) { index++; if (index > 9) { separator = " "; } Console.WriteLine(index + separator + "Rank: " + String.Format("{0:0.00000}", resultTable["RANK"]) + " Title: " + resultTable["TITLE"].ToString()); } Console.ReadLine(); }
static void QuerySearchEngine(ClientContext ctx, string kql, Action<IDictionary<string, object>> processRow, int startRow = 0) { const int BatchSize = 500; var executor = new SearchExecutor(ctx); var results = executor.ExecuteQuery( new KeywordQuery(ctx) { QueryText = kql, StartRow = startRow, RowLimit = BatchSize }); ctx.ExecuteQuery(); var rows = results.Value[0]; rows.ResultRows.ToList().ForEach(processRow); if (rows.RowCount > 0) { QuerySearchEngine(ctx, kql, processRow, startRow + BatchSize); } }
// private methods /// <summary> /// Runs a query /// </summary> /// <param name="web">Site to be processed - can be root web or sub site</param> /// <param name="keywordQueryValue">keyword query </param> /// <param name="sites">sites variable that hold the resulting sites</param> /// <param name="keywordQuery">KeywordQuery object</param> /// <param name="startRow">Start row of the resultset to be returned</param> /// <returns>Total number of rows for the query</returns> private static int ProcessQuery(this Web web, string keywordQueryValue, List <SiteEntity> sites, KeywordQuery keywordQuery, int startRow) { int totalRows = 0; keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; keywordQuery.StartRow = startRow; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SortList.Add("SPSiteUrl", SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(web.Context); // Important to avoid trimming "similar" site collections keywordQuery.TrimDuplicates = false; ClientResult <ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); web.Context.ExecuteQueryRetry(); if (results != null) { if (results.Value[0].RowCount > 0) { totalRows = results.Value[0].TotalRows; foreach (var row in results.Value[0].ResultRows) { sites.Add(new SiteEntity { Title = row["Title"] != null ? row["Title"].ToString() : "", Url = row["SPSiteUrl"] != null ? row["SPSiteUrl"].ToString() : "", Description = row["Description"] != null ? row["Description"].ToString() : "", Template = row["WebTemplate"] != null ? row["WebTemplate"].ToString() : "", }); } } } return(totalRows); }
//按时间显示开始的十条 /// <summary> /// 1为博文,2为汇总 /// </summary> /// <param name="queryState"></param> /// <returns></returns> private DataTable FullQuery(int queryState) { DataTable queryDataTable = null; SPSecurity.RunWithElevatedPrivileges(delegate() { SPServiceContext context = SPServiceContext.Current;// ServerContext.Current;//ServerContext.GetContext SearchServiceApplicationProxy ssap = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site)); using (KeywordQuery qry = new KeywordQuery(ssap)) { qry.EnableStemming = true; qry.TrimDuplicates = true; qry.RowLimit = TotalCount; string titleQue = ""; if (CourseKeyword.Trim().Length > 0) { string[] titles = CourseKeyword.Split(';'); foreach (string titel in titles) { titleQue = titleQue + " title:\"" + titel + "\""; } } string queryText = "ContentClass:STS_ListItem_Posts" + titleQue; SPUser spUser = SPContext.Current.Web.CurrentUser; if (LoginUser == 1 && spUser != null) { queryText = "author:" + spUser.Name + " " + queryText; } ////this.Controls.Add(new LiteralControl(queryText)); qry.QueryText = queryText;// qry.SelectProperties.AddRange(new string[] { "WorkId", "Title", "Author", "Created", "Path", "EditorOWSUSER", "HitHighlightedSummary", "ParentLink" }); qry.SortList.Add("Created", Microsoft.Office.Server.Search.Query.SortDirection.Descending); SearchExecutor searchExecutor = new SearchExecutor(); ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(qry); IEnumerator <ResultTable> iResult = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults).GetEnumerator(); iResult.MoveNext(); ResultTable resultTable = iResult.Current; queryDataTable = resultTable.Table; } }); return(queryDataTable); }
public ResultTable Search(string keywords, List <string> properties, Dictionary <string, bool> sorting, Guid sourceID, int startRowIndex, int rowLimit) { KeywordQuery keywordQuery = new KeywordQuery(this._ctx); keywordQuery.TrimDuplicates = false; keywordQuery.QueryText = keywords; keywordQuery.SourceId = sourceID; keywordQuery.StartRow = startRowIndex; keywordQuery.RowsPerPage = rowLimit; keywordQuery.RowLimit = rowLimit; keywordQuery.SelectProperties.Clear(); if (properties != null && properties.Count > 0) { foreach (string p in properties) { keywordQuery.SelectProperties.Add(p); } } if (sorting != null && sorting.Count > 0) { foreach (var sort in sorting) { if (sort.Value) { keywordQuery.SortList.Add(sort.Key, SortDirection.Ascending); } else { keywordQuery.SortList.Add(sort.Key, SortDirection.Descending); } } } SearchExecutor searchExecutor = new SearchExecutor(this._ctx); ClientResult <ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery); this._ctx.ExecuteQuery(); return(results.Value[0]); }
public void ExecuteSearch(SearchExecutor searchFunc, OnErrorDelegate onErrorFunc = null) { var s = Acquire(); try { searchFunc(s); } catch (Exception e) { if (onErrorFunc != null) { onErrorFunc(e); } } finally { Release(s); } }
static void Main(string[] args) { using (ClientContext clientContext = new ClientContext("http://sp2010")) { 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(); } }
public void GetSearchResults_ShouldReturnResultsFromYahooForJava() { //Arrange string[] keywords = new string[1] { "java" }; var mockedWebRequest = new Mock <IWebRequest>(); mockedWebRequest .Setup(c => c.RequestResponse("https://search.yahoo.com/search?p=java")) .Returns("<html><body><div class='compPagination'><span>670,000,000 resultados</span></div></body></html>"); SearchExecutor searchExecutor = new SearchExecutor(mockedWebRequest.Object, keywords); //Act var result = searchExecutor.ExecuteSearch(); //Assert result.Should().HaveElementAt(0, "java: Google: 0 Bing: 0 Yahoo: 670000000"); }
public void GetSearchResults_ShouldReturnResultsFromGoogleForJava() { //Arrange string[] keywords = new string[1] { "java" }; var mockedWebRequest = new Mock <IWebRequest>(); mockedWebRequest .Setup(c => c.RequestResponse("https://www.google.com/search?q=java")) .Returns("<html><body><div id='resultStats'>Cerca de 670,000,000 resultados</div></body></html>"); SearchExecutor searchExecutor = new SearchExecutor(mockedWebRequest.Object, keywords); //Act var result = searchExecutor.ExecuteSearch(); //Assert result.Should().HaveElementAt(0, "java: Google: 670000000 Bing: 0 Yahoo: 0"); }
public void GetSearchResults_ShouldReturnResultsFromBingForJava() { //Arrange string[] keywords = new string[1] { "java" }; var mockedWebRequest = new Mock <IWebRequest>(); mockedWebRequest .Setup(c => c.RequestResponse("https://www.bing.com/search?q=java")) .Returns("<html><body><div id='b_tween'><span class='sb_count' data-bm='4'>23.400.000 results</span></div></body></html>"); SearchExecutor searchExecutor = new SearchExecutor(mockedWebRequest.Object, keywords); //Act var result = searchExecutor.ExecuteSearch(); //Assert result.Should().HaveElementAt(0, "java: Google: 0 Bing: 23400000 Yahoo: 0"); }
public void ParserTest() { SearchExecutor searchExecutor = new SearchExecutor(); Task <QueryResult> queryResult = searchExecutor.SearchAsync(Yandex, "МСФО", new CancellationToken()); queryResult.Wait(); Assert.IsNotNull(queryResult.Result); Assert.IsNotNull(queryResult.Result.SearchResult); AnchorParser parser = new AnchorParser(); Link[] links = parser.ParseLinks(queryResult.Result.SearchEngine.Domain, queryResult.Result.SearchResult); Assert.IsNotNull(links); foreach (Link link in links) { Debug.WriteLine(link.URL); } Assert.IsTrue(links.Length > 10); }
public void CalculateWinnerPerSearchEngine_ShouldReturnDotNetAsWinnerForGoogle() { //Arrange IWebRequest webRequest = new WebRequestImplementation(); SearchExecutor searchExecutor = new SearchExecutor(webRequest); Report googleReport1 = new Report() { SearchEngine = SearchEngineEnum.Google.ToString(), Keyword = ".net", Quantity = 999 }; Report googleReport2 = new Report() { SearchEngine = SearchEngineEnum.Google.ToString(), Keyword = "java", Quantity = 758 }; //Act searchExecutor.reports.Add(googleReport1); searchExecutor.reports.Add(googleReport2); var result = searchExecutor.CalculateWinnerPerSearchEngine(SearchEngineEnum.Google); //Assert result.Should().Be("Google winner: .net"); }
public void CalculateWinnerPerSearchEngine_ShouldReturnDotNetAsWinnerForYahoo() { //Arrange IWebRequest webRequest = new WebRequestImplementation(); SearchExecutor searchExecutor = new SearchExecutor(webRequest); Report yahooReport1 = new Report() { SearchEngine = SearchEngineEnum.Yahoo.ToString(), Keyword = ".net", Quantity = 65 }; Report yahooReport2 = new Report() { SearchEngine = SearchEngineEnum.Yahoo.ToString(), Keyword = "java", Quantity = 50 }; //Act searchExecutor.reports.Add(yahooReport1); searchExecutor.reports.Add(yahooReport2); var result = searchExecutor.CalculateWinnerPerSearchEngine(SearchEngineEnum.Yahoo); //Assert result.Should().Be("Yahoo winner: .net"); }
// static void Main(string[] args) { // using (ClientContext context = new ClientContext(global::VS13.Properties.Settings.Default.SharePointServerUrl)) { // KeywordQuery query = new KeywordQuery(context); query.StartRow = 0; query.RowLimit = 500; query.EnableStemming = true; query.TrimDuplicates = false; //query.QueryText = "tiff"; query.QueryText = "scope:\"All Sites\" AND contentclass:\"STS_ListItem_DocumentLibrary\" AND IsDocument:\"True\" AND Created:2013-08-05"; query.SelectProperties.Add("scope"); query.SelectProperties.Add("contentclass"); query.SelectProperties.Add("IsDocument"); query.SelectProperties.Add("DAV:displayname"); query.SelectProperties.Add("DAV:href"); query.SelectProperties.Add("TBBARCODEOWSTEXT"); query.SelectProperties.Add("BatchDateOWSDATE"); query.SelectProperties.Add("Created"); ClientResult<ResultTableCollection> results = new SearchExecutor(context).ExecuteQuery(query); context.ExecuteQuery(); foreach (IDictionary result in results.Value[0].ResultRows) { Console.WriteLine("{0}: {1}","scope",result["scope"]); Console.WriteLine("{0}: {1}","contentclass",result["contentclass"]); Console.WriteLine("{0}: {1}","IsDocument",result["IsDocument"]); Console.WriteLine("{0}: {1}","DAV:displayname",result["DAV:displayname"]); Console.WriteLine("{0}: {1}","DAV:href",result["DAV:href"]); Console.WriteLine("{0}: {1}","BOLNumOWSTEXT",result["BOLNumOWSTEXT"]); Console.WriteLine("{0}: {1}","BatchDateOWSDATE",result["BatchDateOWSDATE"]); Console.WriteLine("{0}: {1}","Created",result["Created"]); Console.WriteLine("{0}: {1}","Title",result["Title"]); Console.WriteLine("{0}: {1}","Path",result["Path"]); Console.WriteLine("{0}: {1}","Description",result["Description"]); } Console.ReadLine(); } }
static void QuerySearchEngine(ClientContext ctx, string kql, Action <IDictionary <string, object> > processRow, int startRow = 0) { const int BatchSize = 500; var executor = new SearchExecutor(ctx); var results = executor.ExecuteQuery( new KeywordQuery(ctx) { QueryText = kql, StartRow = startRow, RowLimit = BatchSize }); ctx.ExecuteQuery(); var rows = results.Value[0]; rows.ResultRows.ToList().ForEach(processRow); if (rows.RowCount > 0) { QuerySearchEngine(ctx, kql, processRow, startRow + BatchSize); } }
private int ProcessQuery(string keywordQueryValue, List <SiteData> sites, ClientContext ctx, KeywordQuery keywordQuery, int startRow) { int totalRows = 0; keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; keywordQuery.StartRow = startRow; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SortList.Add("SPSiteUrl", Microsoft.SharePoint.Client.Search.Query.SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(ctx); ClientResult <ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); ctx.ExecuteQuery(); if (results != null) { if (results.Value[0].RowCount > 0) { totalRows = results.Value[0].TotalRows; foreach (var row in results.Value[0].ResultRows) { sites.Add(new SiteData { Title = row["Title"] != null ? row["Title"].ToString() : "", Url = row["SPSiteUrl"] != null ? row["SPSiteUrl"].ToString() : "", Description = row["Description"] != null ? row["Description"].ToString() : "", }); } } } return(totalRows); }
/// <summary> /// /// </summary> /// <param name="cc">ClientContext object of an arbitrary site collection accessible by the defined enumeration username and password</param> /// <param name="keywordQueryValue">Query to execute</param> /// <param name="sites">List of found site collections</param> /// <param name="keywordQuery">KeywordQuery instance that will perform the actual queries</param> /// <param name="startRow">Row as of which we want to see the results</param> /// <returns>Total result rows of the query</returns> private static int ProcessQuery(ClientRuntimeContext cc, string keywordQueryValue, List <string> sites, KeywordQuery keywordQuery, int startRow) { int totalRows = 0; keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; keywordQuery.StartRow = startRow; keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SortList.Add("SPSiteUrl", SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(cc); // Important to avoid trimming "similar" site collections keywordQuery.TrimDuplicates = false; ClientResult <ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); cc.ExecuteQueryRetry(); if (results != null) { if (results.Value[0].RowCount > 0) { totalRows = results.Value[0].TotalRows; foreach (var row in results.Value[0].ResultRows) { if (row["SPSiteUrl"] != null) { sites.Add(row["SPSiteUrl"].ToString()); } } } } return(totalRows); }
private int FullQuery(string txtFrom, string txtTo) { SPServiceContext context = SPServiceContext.Current;// ServerContext.Current;//ServerContext.GetContext SearchServiceApplicationProxy ssap = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site)); using (KeywordQuery qry = new KeywordQuery(ssap)) { qry.EnableStemming = true; qry.TrimDuplicates = true; qry.RowLimit = 10000; string queryText = ""; //queryText = "-Author:系统帐户 -Author:administrator "; qry.QueryText = queryText + "Created:" + txtFrom + ".." + txtTo; qry.SelectProperties.AddRange(new string[] { "WorkId", "Title", "Author", "Created", "Path", "ContentClass", "FileExtension" }); qry.SortList.Add("Created", Microsoft.Office.Server.Search.Query.SortDirection.Descending); SearchExecutor searchExecutor = new SearchExecutor(); ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(qry); IEnumerator <ResultTable> iResult = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults).GetEnumerator(); iResult.MoveNext(); ResultTable resultTable = iResult.Current; DataTable queryDataTable = resultTable.Table; return(queryDataTable.Rows.Count); } }
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { SetPageTitles("Tìm kiếm"); SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(SPContext.Current.Site.Url)) { using (SPWeb web = site.OpenWeb()) { string k = Request.QueryString["k"]; KeywordQuery keywordQuery = new KeywordQuery(web); keywordQuery.QueryText = k; keywordQuery.QueryText += "(contentclass:STS_List OR contentclass:STS_List_DocumentLibrary) CustomeURL:.aspx"; //keywordQuery.QueryText = "scope:\"All Sites\" AND (contentclass:\"STS_Site\" OR contentclass:\"STS_Web\")"; keywordQuery.StartRow = 0; keywordQuery.RowLimit = 500; //keywordQuery.SourceId = PeopleSearch; keywordQuery.EnableNicknames = true; keywordQuery.EnablePhonetic = true; keywordQuery.TrimDuplicates = false; //which columns should be returned in the query result. keywordQuery.SelectProperties.Add("title"); keywordQuery.SelectProperties.Add("CustomeURL"); keywordQuery.SelectProperties.Add("ImageUrl"); SearchExecutor searchExecutor = new SearchExecutor(); ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery); var resultTables = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults); if (resultTables != null && resultTables.Any()) { var resultTable = resultTables.FirstOrDefault(); if (resultTable != null) { DataTable dataTable = resultTable.Table; //rpResult.DataSource = dataTable; //rpResult.DataBind(); BindDataIntoRepeater(dataTable); table = dataTable; } else { table = new DataTable(); } } else { table = new DataTable(); } } } }); } }
private IEnumerable<NavigationNode> GetNavigationNodesBySearch(SPWeb web, NavigationSearchSettings settings, IEnumerable<string> additionalFilters = null) { var filters = new List<string>(settings.GlobalFilters); // Check if find result source var searchResultSource = this.searchHelper.GetResultSourceByName(web.Site, settings.ResultSourceName, SearchObjectLevel.Ssa); if (searchResultSource == null) { this.logger.Error("searchResultSource is null in GSoft.Dynamite.Navigation.NavigationService.GetNavigationNodeItems"); return new List<NavigationNode>(); } var query = new KeywordQuery(web) { SourceId = searchResultSource.Id, TrimDuplicates = false, RowLimit = 500 }; // Add defined filters if (additionalFilters != null) { filters.AddRange(additionalFilters); } if (settings.SelectedProperties != null && settings.SelectedProperties.Any()) { query.SelectProperties.AddRange(settings.SelectedProperties.ToArray()); } // TODO: For now, the filters are applied seperated by whitespaces which means "AND" in KQL land. // TODO: We should figure out a way to make this more flexible to use "OR" if necessary. query.QueryText = string.Join(" ", filters.Where(filter => !string.IsNullOrEmpty(filter))); // Execute search query var tables = new SearchExecutor().ExecuteQuery(query); if (tables.Exists(KnownTableTypes.RelevantResults)) { // Build navigation nodes for search results var results = tables.Filter("TableType", KnownTableTypes.RelevantResults).Single(relevantTable => relevantTable.QueryRuleId == Guid.Empty); var nodes = results.Table.Rows.Cast<DataRow>().Select(dataRow => new NavigationNode(dataRow, settings.NavigationManagedPropertyName)); this.logger.Info( "GetNavigationNodeItems: Found {0} items with search query '{1}' from source '{2}'.", results.Table.Rows.Count, query.QueryText, settings.ResultSourceName); return nodes; } this.logger.Error( "GetNavigationNodeItems: No relevant results table found with search query '{0}' from source '{1}'.", query.QueryText, settings.ResultSourceName); return new List<NavigationNode>(); }
private static int ExecuteSearch(SPSite site, SPListItem item, string query, string queryTemplate, string sourceLevel, string sourceId, string sourceName, int rowlimit, out List<DynamicAsset> listItems, Dictionary<string, string> itemsProcessed) { HttpRequest httpRequest = new HttpRequest(string.Empty, site.RootWeb.Url, string.Empty); HttpContext.Current = new HttpContext(httpRequest, new HttpResponse(new StringWriter())); SPControl.SetContextWeb(HttpContext.Current, site.RootWeb); Microsoft.SharePoint.SPServiceContext context = SPServiceContext.GetContext(site); // Get the search service application proxy IEnumerable<ResultTable> results = null; KeywordQuery keywordQuery = new KeywordQuery(site); if (!string.IsNullOrEmpty(sourceName)) { SearchServiceApplicationProxy searchProxy = context.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy; SourceRecord resultSource = null; SearchObjectOwner owner = null; switch (sourceLevel.ToLower()) { case "ssa": owner = new SearchObjectOwner(SearchObjectLevel.Ssa); break; case "spsite": owner = new SearchObjectOwner(SearchObjectLevel.SPSite, site.RootWeb); break; default: break; } if (owner != null) { resultSource = searchProxy.GetResultSourceByName(sourceName, owner); keywordQuery.SourceId = resultSource.Id; log.TraceInformation(string.Format("Found Result Source: {0}", resultSource.Name)); } } else { keywordQuery.SourceId = new Guid(sourceId); } //filter out the path from query template queryTemplate = FilterPathQueryTemplate(queryTemplate); //replace token values e.g queryTemplate = ReplaceTokens(site, item, queryTemplate); //Dont filter expirt if query is for event type if (queryTemplate.ToLower().Contains("ListItemID:{QueryString.eventId}".ToLower())) { queryTemplate = queryTemplate.ToLower().Replace("ListItemID:{QueryString.eventId}".ToLower(), ""); } else { //filter expired items queryTemplate += AddExpiryFilter(); queryTemplate += AddPendingOrExpiringFilter(); } listItems = null; log.TraceInformation(string.Format("Preparing search execution: QueryTempalte: {0}, Query: {1}, SourceName: {2}, SourceLevel: {3}", queryTemplate, query, sourceName, sourceLevel)); if (!queryTemplate.Contains("searchboxquery")) { keywordQuery.QueryTemplate = queryTemplate; keywordQuery.QueryText = query; keywordQuery.RowLimit = 500; SearchExecutor searchExecutor = new SearchExecutor(); ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery); results = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults); if (results.Count() > 0) { ResultTable resultTable = results.FirstOrDefault(); DataTable dataTable = resultTable.Table; listItems = ProcessResults(site, dataTable, itemsProcessed); } log.TraceInformation(string.Format("Executed query with elapsed time: {0}", resultTableCollection != null ? resultTableCollection.ElapsedTime : -1)); return resultTableCollection != null ? resultTableCollection.ElapsedTime : -1; } return -1; }
private int ProcessQuery(string keywordQueryValue, List<SiteData> sites, ClientContext ctx, KeywordQuery keywordQuery, int startRow) { int totalRows = 0; keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; keywordQuery.StartRow = startRow; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SortList.Add("SPSiteUrl", Microsoft.SharePoint.Client.Search.Query.SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(ctx); ClientResult<ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); ctx.ExecuteQuery(); if (results != null) { if (results.Value[0].RowCount > 0) { totalRows = results.Value[0].TotalRows; foreach (var row in results.Value[0].ResultRows) { sites.Add(new SiteData { Title = row["Title"] != null ? row["Title"].ToString() : "", Url = row["SPSiteUrl"] != null ? row["SPSiteUrl"].ToString() : "", Description = row["Description"] != null ? row["Description"].ToString() : "", }); } } } return totalRows; }
/// <summary> /// Fires query on SharePoint Search and fills the result data. /// </summary> /// <param name="clientContext">The client context.</param> /// <param name="keywordQuery">The keyword query.</param> /// <param name="searchObject">The search object.</param> /// <param name="isMatterSearch">The flag to determine weather call is from Search Matter or Search Document.</param> /// <param name="managedProperties">List of managed properties</param> /// <returns>It returns a string object, that contains all the results combined with dollar pipe dollar separator.</returns> private SearchResponseVM FillResultData(ClientContext clientContext, KeywordQuery keywordQuery, SearchRequestVM searchRequestVM, Boolean isMatterSearch, List<string> managedProperties) { SearchResponseVM searchResponseVM = new SearchResponseVM(); Boolean isReadOnly; try { var searchObject = searchRequestVM.SearchObject; //var client = searchRequestVM.Client; if (null != searchObject.Sort) { keywordQuery.EnableSorting = true; keywordQuery = GetSortByProperty(keywordQuery, searchObject, isMatterSearch); } if(keywordQuery.QueryText.Length > 4000) { return new SearchResponseVM(); } SearchExecutor searchExecutor = new SearchExecutor(clientContext); ClientResult<ResultTableCollection> resultsTableCollection = searchExecutor.ExecuteQuery(keywordQuery); Users currentLoggedInUser = userDetails.GetLoggedInUserDetails(clientContext); if (null != resultsTableCollection && null != resultsTableCollection.Value && 0 < resultsTableCollection.Value.Count && null != resultsTableCollection.Value[0].ResultRows) { if (isMatterSearch && 0 < resultsTableCollection.Value.Count && null != resultsTableCollection.Value[0].ResultRows && !string.IsNullOrWhiteSpace(currentLoggedInUser.Email)) { foreach (IDictionary<string, object> matterMetadata in resultsTableCollection.Value[0].ResultRows) { isReadOnly = false; if (null != matterMetadata) { // Decode matter properties DecodeMatterProperties(matterMetadata); string readOnlyUsers = Convert.ToString(matterMetadata[searchSettings.ManagedPropertyBlockedUploadUsers], CultureInfo.InvariantCulture); if (!string.IsNullOrWhiteSpace(readOnlyUsers)) { isReadOnly = IsUserReadOnlyForMatter(isReadOnly, currentLoggedInUser.Name, currentLoggedInUser.Email, readOnlyUsers); } matterMetadata.Add(generalSettings.IsReadOnlyUser, isReadOnly); } } } else { /*Keeping the code to clean the author values*/ foreach (IDictionary<string, object> documentMetadata in resultsTableCollection.Value[0].ResultRows) { if (null != documentMetadata) { string authorData = Convert.ToString(documentMetadata[searchSettings.ManagedPropertyAuthor], CultureInfo.InvariantCulture); int ltIndex = authorData.IndexOf(ServiceConstants.OPENING_ANGULAR_BRACKET, StringComparison.Ordinal); int gtIndex = authorData.IndexOf(ServiceConstants.CLOSING_ANGULAR_BRACKET, StringComparison.Ordinal); authorData = (0 <= ltIndex && ltIndex < gtIndex) ? authorData.Remove(ltIndex, (gtIndex - ltIndex) + 1) : authorData; authorData = authorData.Replace(ServiceConstants.ENCODED_DOUBLE_QUOTES, string.Empty); documentMetadata[searchSettings.ManagedPropertyAuthor] = authorData.Trim(); } } } if (resultsTableCollection.Value.Count > 1) { searchResponseVM.TotalRows = resultsTableCollection.Value[0].TotalRows; searchResponseVM.SearchResults = resultsTableCollection.Value[0].ResultRows; } else { if (resultsTableCollection.Value[0].TotalRows == 0) { searchResponseVM = NoDataRow(managedProperties); } else { searchResponseVM.TotalRows = resultsTableCollection.Value[0].TotalRows; searchResponseVM.SearchResults = resultsTableCollection.Value[0].ResultRows; } } } else { searchResponseVM = NoDataRow(managedProperties); } } catch (Exception exception) { customLogger.LogError(exception, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, logTables.SPOLogTable); throw; } return searchResponseVM; }
// private methods /// <summary> /// Runs a query /// </summary> /// <param name="web">Site to be processed - can be root web or sub site</param> /// <param name="keywordQueryValue">keyword query </param> /// <param name="sites">sites variable that hold the resulting sites</param> /// <param name="keywordQuery">KeywordQuery object</param> /// <param name="startRow">Start row of the resultset to be returned</param> /// <returns>Total number of rows for the query</returns> private static int ProcessQuery(this Web web, string keywordQueryValue, List<SiteEntity> sites, KeywordQuery keywordQuery, int startRow) { int totalRows = 0; keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; keywordQuery.StartRow = startRow; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SortList.Add("SPSiteUrl", SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(web.Context); // Important to avoid trimming "similar" site collections keywordQuery.TrimDuplicates = false; ClientResult<ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); web.Context.ExecuteQueryRetry(); if (results != null) { if (results.Value[0].RowCount > 0) { totalRows = results.Value[0].TotalRows; foreach (var row in results.Value[0].ResultRows) { sites.Add(new SiteEntity { Title = row["Title"] != null ? row["Title"].ToString() : "", Url = row["SPSiteUrl"] != null ? row["SPSiteUrl"].ToString() : "", Description = row["Description"] != null ? row["Description"].ToString() : "", Template = row["WebTemplate"] != null ? row["WebTemplate"].ToString() : "", }); } } } return totalRows; }
/// <summary> /// Fires query on SharePoint Search and fills the result data. /// </summary> /// <param name="clientContext">The client context.</param> /// <param name="keywordQuery">The keyword query.</param> /// <param name="searchObject">The search object.</param> /// <param name="isMatterSearch">The flag to determine weather call is from Search Matter or Search Document.</param> /// <param name="managedProperties">List of managed properties</param> /// <returns>It returns a string object, that contains all the results combined with dollar pipe dollar separator.</returns> internal static string FillResultData(ClientContext clientContext, KeywordQuery keywordQuery, SearchObject searchObject, Boolean isMatterSearch, List<string> managedProperties) { string result = string.Empty; Boolean isReadOnly; try { if (null != searchObject.Sort) { keywordQuery.EnableSorting = true; keywordQuery = SearchHelperFunctions.GetSortByProperty(keywordQuery, searchObject, isMatterSearch); } SearchExecutor searchExecutor = new SearchExecutor(clientContext); ClientResult<ResultTableCollection> resultsTableCollection = searchExecutor.ExecuteQuery(keywordQuery); Users currentLoggedInUser = UIUtility.GetLoggedInUserDetails(clientContext); if (null != resultsTableCollection && null != resultsTableCollection.Value && 0 < resultsTableCollection.Value.Count && null != resultsTableCollection.Value[0].ResultRows) { if (isMatterSearch && 0 < resultsTableCollection.Value.Count && null != resultsTableCollection.Value[0].ResultRows && (!string.IsNullOrWhiteSpace(currentLoggedInUser.Name) || !string.IsNullOrWhiteSpace(currentLoggedInUser.Email))) { foreach (IDictionary<string, object> matterMetadata in resultsTableCollection.Value[0].ResultRows) { isReadOnly = false; if (null != matterMetadata) { // Decode matter properties DecodeMatterProperties(matterMetadata); string readOnlyUsers = Convert.ToString(matterMetadata[SearchConstants.ManagedPropertyBlockedUploadUsers], CultureInfo.InvariantCulture); if (!string.IsNullOrWhiteSpace(readOnlyUsers)) { isReadOnly = IsUserReadOnlyForMatter(isReadOnly, currentLoggedInUser.Name, currentLoggedInUser.Email, readOnlyUsers); } matterMetadata.Add(TextConstants.IsReadOnlyUser, isReadOnly); } } } else { /*Keeping the code to clean the author values*/ foreach (IDictionary<string, object> documentMetadata in resultsTableCollection.Value[0].ResultRows) { if (null != documentMetadata) { string authorData = Convert.ToString(documentMetadata[SearchConstants.ManagedPropertyAuthor], CultureInfo.InvariantCulture); int ltIndex = authorData.IndexOf(ConstantStrings.OpeningAngularBracket, StringComparison.Ordinal); int gtIndex = authorData.IndexOf(ConstantStrings.ClosingAngularBracket, StringComparison.Ordinal); authorData = (0 <= ltIndex && ltIndex < gtIndex) ? authorData.Remove(ltIndex, (gtIndex - ltIndex) + 1) : authorData; authorData = authorData.Replace(ServiceConstantStrings.DoubleQuotes, string.Empty); documentMetadata[SearchConstants.ManagedPropertyAuthor] = authorData.Trim(); } } } if (1 < resultsTableCollection.Value.Count) { result = string.Concat(JsonConvert.SerializeObject(resultsTableCollection.Value[0].ResultRows), ConstantStrings.DOLLAR, ConstantStrings.Pipe, ConstantStrings.DOLLAR, resultsTableCollection.Value[0].TotalRows, ConstantStrings.DOLLAR, ConstantStrings.Pipe, ConstantStrings.DOLLAR, JsonConvert.SerializeObject(resultsTableCollection.Value[1].ResultRows)); } else { if (0 == resultsTableCollection.Value[0].TotalRows) { result = SearchHelperFunctions.NoDataRow(managedProperties); } else { result = string.Concat(JsonConvert.SerializeObject(resultsTableCollection.Value[0].ResultRows), ConstantStrings.DOLLAR, ConstantStrings.Pipe, ConstantStrings.DOLLAR, resultsTableCollection.Value[0].TotalRows); } } } else { result = SearchHelperFunctions.NoDataRow(managedProperties); } } catch (Exception exception) { result = Logger.LogError(exception, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ServiceConstantStrings.LogTableName); } return result; }
public ClientResult<ResultTableCollection> ExecuteSearchQuery( string query, string sorting = null, string rankModel = null) { var keywordQuery = new KeywordQuery(_clientContext){ QueryText = query}; // Ranking model to use if (!String.IsNullOrEmpty(rankModel)) keywordQuery.RankingModelId = rankModel; // If sorting parameter provided if (!String.IsNullOrEmpty(sorting)) keywordQuery.SortList.Add(sorting, SortDirection.Descending); // Select only this properties for documents keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("Path"); keywordQuery.SelectProperties.Add("ServerRedirectedURL"); keywordQuery.SelectProperties.Add("ModifiedOWSDATE"); keywordQuery.SelectProperties.Add("ModifiedBy"); keywordQuery.SelectProperties.Add("CreatedOWSDATE"); keywordQuery.SelectProperties.Add("CreatedBy"); keywordQuery.SelectProperties.Add("SPWebUrl"); keywordQuery.SelectProperties.Add("Rank"); keywordQuery.SelectProperties.Add("LastModifiedTime"); // Select only this properties for tasks keywordQuery.SelectProperties.Add("StatusOWSCHCS"); keywordQuery.SelectProperties.Add("PercentCompleteOWSNMBR"); keywordQuery.SelectProperties.Add("AssignedTo"); keywordQuery.SelectProperties.Add("DueDateOWSDATE"); keywordQuery.SelectProperties.Add("StartDateOWSDATE"); // Select only this properties for events keywordQuery.SelectProperties.Add("EventDateOWSDATE"); keywordQuery.SelectProperties.Add("EndDateOWSDATE"); var searchExecutor = new SearchExecutor(_clientContext); var results = searchExecutor.ExecuteQuery(keywordQuery); return results; }
/// <summary> /// Get the peer url for a page represents a cross site publishing catalog item /// </summary> /// <param name="currentUrl">The current page url</param> /// <param name="label">The target label to resolve</param> /// <param name="associationKeyManagedPropertyName">The content association key search managed property name</param> /// <param name="associationKeyValue">The value of the content association key for the current item</param> /// <param name="languageManagedPropertyName">The language search managed property name</param> /// <param name="catalogNavigationTermManagedPropertyName">The navigation search managed property name used for the friendly url generation</param> /// <returns>The url of the peer page</returns> public Uri GetPeerCatalogItemUrl( Uri currentUrl, VariationLabelInfo label, string associationKeyManagedPropertyName, string associationKeyValue, string languageManagedPropertyName, string catalogNavigationTermManagedPropertyName) { ValidateProperties("GetPeerCatalogItemUrl", associationKeyManagedPropertyName, associationKeyValue, catalogNavigationTermManagedPropertyName); var url = new Uri(Variations.GetPeerUrl(SPContext.Current.Web, currentUrl.AbsolutePath, label.Title), UriKind.Relative); var searchResultSource = this.searchHelper.GetResultSourceByName(SPContext.Current.Site, LocalSharePointResultsSourceName, SearchObjectLevel.Ssa); var queryText = string.Format( CultureInfo.InvariantCulture, "{0}:{1} {2}:{3}", associationKeyManagedPropertyName, associationKeyValue, languageManagedPropertyName, label.Language); var query = new KeywordQuery(SPContext.Current.Web) { SourceId = searchResultSource.Id, QueryText = queryText }; // Search query must include the following properties for the friendly URL to work query.SelectProperties.AddRange(new[] { catalogNavigationTermManagedPropertyName, BuiltInManagedProperties.Url.Name, BuiltInManagedProperties.SiteUrl.Name, BuiltInManagedProperties.ListId.Name }); var tables = new SearchExecutor().ExecuteQuery(query); if (tables.Exists(KnownTableTypes.RelevantResults)) { var table = tables.Filter("TableType", KnownTableTypes.RelevantResults).Single(relevantTable => relevantTable.QueryRuleId == Guid.Empty); if (table != null && table.ResultRows.Count == 1 && table.Table.Columns.Contains(BuiltInManagedProperties.Url.Name)) { url = new Uri(table.Table.Rows[0][BuiltInManagedProperties.Url.Name].ToString(), UriKind.Absolute); // Convert the absolute Uri into a relative Uri. This is required for environments using a load balancer, // because we need to ignore the load balancer's port found in the absolute Uri. url = new Uri(url.AbsolutePath, UriKind.Relative); } } return url; }
private List<string> GetMemberSites() { var siteUri = new Uri(ConfigurationManager.AppSettings["SiteCollectionRequests_SiteUrl"]); using (var context = this.contextFactory.GetContext(siteUri.ToString())) { var keywordQuery = new KeywordQuery(context); keywordQuery.QueryText = "rdoyle AND SiteGroup:\"Team\""; keywordQuery.TrimDuplicates = false; var searchExecutor = new SearchExecutor(context); var results = searchExecutor.ExecuteQuery(keywordQuery); context.ExecuteQuery(); } return new List<string>(); }
/// <summary> /// Get the peer url for a page represents a cross site publishing catalog item /// </summary> /// <param name="currentUrl">The current page url</param> /// <param name="label">The target label to resolve</param> /// <param name="associationKeyManagedPropertyName">The content association key search managed property name</param> /// <param name="associationKeyValue">The value of the content association key for the current item</param> /// <param name="languageManagedPropertyName">The language search managed property name</param> /// <param name="catalogNavigationTermManagedPropertyName">The navigation search managed property name used for the friendly url generation</param> /// <returns>The url of the peer page</returns> public Uri GetPeerCatalogItemUrl( Uri currentUrl, VariationLabelInfo label, string associationKeyManagedPropertyName, string associationKeyValue, string languageManagedPropertyName, string catalogNavigationTermManagedPropertyName) { ValidateProperties("GetPeerCatalogItemUrl", associationKeyManagedPropertyName, associationKeyValue, catalogNavigationTermManagedPropertyName); var url = new Uri(Variations.GetPeerUrl(SPContext.Current.Web, currentUrl.AbsoluteUri, label.Title), UriKind.Relative); var searchResultSource = this.searchHelper.GetResultSourceByName(SPContext.Current.Site, LocalSharePointResultsSourceName, SearchObjectLevel.Ssa); // We take the Title of the Label because the Label.Language is always a language from a language pack (supported). Sometimes, we deal with Not implemented language (ie Inuktitut "IU"). // Our workaround is to set the Title as the agnostic language label ("en", "fr", "iu", etc). // For backward compatibility purpose, we will test the length of the Title. If it's not 2, we will fallback on the Language of the Label. // This is not 100% robust but it the only way we found to deal with unsupported language. var labelLocaleAgnosticLanguage = label.Title.Length == 2 ? label.Title : label.Language.Split('-').FirstOrDefault(); var queryText = string.Format( CultureInfo.InvariantCulture, "{0}:{1} {2}={3}", associationKeyManagedPropertyName, associationKeyValue, languageManagedPropertyName, labelLocaleAgnosticLanguage); var query = new KeywordQuery(SPContext.Current.Web) { SourceId = searchResultSource.Id, QueryText = queryText }; // Search query must include the following properties for the friendly URL to work query.SelectProperties.AddRange(new[] { catalogNavigationTermManagedPropertyName, BuiltInManagedProperties.Url, BuiltInManagedProperties.SiteUrl, BuiltInManagedProperties.ListId }); var tables = new SearchExecutor().ExecuteQuery(query); if (tables.Exists(KnownTableTypes.RelevantResults)) { var table = tables.Filter("TableType", KnownTableTypes.RelevantResults).Single(relevantTable => relevantTable.QueryRuleId == Guid.Empty); if (table != null && table.ResultRows.Count == 1 && table.Table.Columns.Contains(BuiltInManagedProperties.Url)) { url = new Uri(table.Table.Rows[0][BuiltInManagedProperties.Url].ToString()); } } return url; }
/*private static string GetContentSourcesSearchCondition(string contentSources) { var contentSourcesSearchConditions = string.Empty; var sources = contentSources.Split(','); foreach (var source in sources) { if (contentSourcesSearchConditions.Length > 0) contentSourcesSearchConditions += " OR "; contentSourcesSearchConditions += Settings.Default.SP2013ContentSourceName + "=\"" + source + "\""; } if (contentSourcesSearchConditions.Length > 0) contentSourcesSearchConditions = " AND (" + contentSourcesSearchConditions + ")"; return contentSourcesSearchConditions; }*/ public SearchResponseDto GetSearchResults(string searchTerm, Dictionary<string, string> sources, Dictionary<string, string> refiners, int skip, int take) { SearchResponseDto retVal = null; List<SearchContentSourceDto> srcs = null; using (var ctx = new ClientContext(Settings.Default.SP2013SearchUrl)) { // get the content sources for the query var contentSources = string.Empty; if (!string.IsNullOrEmpty(Settings.Default.SP2013ContentSources)) { srcs = GetContentSourcesList(Settings.Default.SP2013ContentSources); if ((sources != null) && (sources.Count > 0)) srcs = SetSearchedContentSourcesList(sources, srcs); contentSources = GetContentSourcesSearchCondition(srcs); } var query = new KeywordQuery(ctx) { QueryText = searchTerm + contentSources, StartRow = skip, RowLimit = take }; //query.Refiners = "COB,BkrPsu,UwrPsu,AccYr"; // TODO: why aren't bkrpsu and accyr working? query.Refiners = Settings.Default.SearchRefinersList; if (refiners != null) { foreach (var refiner in refiners) { query.RefinementFilters.Add(String.Format("{0}:{1}", refiner.Key, refiner.Value)); } } var returnProps = Settings.Default.SP2013Properties.Split(','); foreach (var prop in returnProps) { query.SelectProperties.Add(prop); } var executor = new SearchExecutor(ctx); var results = executor.ExecuteQuery(query); ctx.ExecuteQuery(); if (results.Value[0] != null) { retVal = new SearchResponseDto(skip + 1, take, results.Value[0].TotalRowsIncludingDuplicates); if (srcs != null) retVal.ContentSources = srcs; retVal.SearchResults.AddRange( results.Value[0].ResultRows.Select(GetSearchContentDto).Where(contentDto => contentDto != null)); retVal.Properties = returnProps; retVal.Refiners = results.Value.FirstOrDefault(v => v.TableType == "RefinementResults"); } } return retVal; }
protected override void ExecuteCmdlet() { int startRow = StartRow; int rowLimit = MaxResults; if (All.IsPresent) { startRow = 0; rowLimit = 500; SortList = new Hashtable() { { "IndexDocId", "ascending" } }; } var currentCount = 0; PnPResultTableCollection finalResults = null; do { KeywordQuery keywordQuery = CreateKeywordQuery(); keywordQuery.StartRow = startRow; keywordQuery.RowLimit = rowLimit; var searchExec = new SearchExecutor(ClientContext); if (startRow > 0 && All.IsPresent) { keywordQuery.Refiners = null; // Only need to set on first page for auto paging } var results = searchExec.ExecuteQuery(keywordQuery); ClientContext.ExecuteQueryRetry(); if (results.Value != null) { if (finalResults == null) { finalResults = (PnPResultTableCollection)results.Value; foreach (ResultTable resultTable in results.Value) { if (resultTable.TableType == "RelevantResults") { currentCount = resultTable.RowCount; } } } else { // we're in paging mode foreach (ResultTable resultTable in results.Value) { PnPResultTable pnpResultTable = (PnPResultTable)resultTable; var existingTable = finalResults.SingleOrDefault(t => t.TableType == resultTable.TableType); if (existingTable != null) { existingTable.ResultRows.AddRange(pnpResultTable.ResultRows); } else { finalResults.Add(pnpResultTable); } if (pnpResultTable.TableType == "RelevantResults") { currentCount = resultTable.RowCount; } } } } startRow += rowLimit; } while (currentCount == rowLimit && All.IsPresent); if (!RelevantResults.IsPresent) { WriteObject(finalResults, true); } else { var results = finalResults.FirstOrDefault(t => t.TableType == "RelevantResults")? .ResultRows.Select(r => ConvertToPSObject(r)); WriteObject(results, true); } }
/// <summary> /// This method executes te search api to get most popular items from the current site /// </summary> /// <param name="clientContext"></param> /// <param name="propListName"></param> /// <param name="errMSG"></param> /// <returns></returns> public static string GetFAQFromSearchAPI(string propListName, string errMSG) { string mostPopular = string.Empty; try { Web oWeb = clientContext.Web; clientContext.Load(oWeb); clientContext.ExecuteQuery(); KeywordQuery keywordQuery = new KeywordQuery(clientContext); Uri uri = new Uri(oWeb.Url.ToString()); string urlPath = System.Web.HttpUtility.UrlPathEncode(uri.GetLeftPart(UriPartial.Authority) + GetListUrlByTitle(propListName)[0]); string actualURL = string.Format(@"path:{0}", urlPath); StringCollection selectProperties = keywordQuery.SelectProperties; selectProperties.Add("LastModifiedTime"); selectProperties.Add("ContentTypeId"); selectProperties.Add("Title"); selectProperties.Add("Answer"); keywordQuery.QueryText = actualURL; SearchExecutor searchExecutor = new SearchExecutor(clientContext); ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery); clientContext.ExecuteQuery(); mostPopular = GenerateFAQHTML(results, errMSG); } catch (Exception ex) { mostPopular = errMSG; Logger.WriteLog(Logger.Category.Unexpected, string.Format("{0}-{1}", "CommonHelper", "GetFAQFromSearchAPI"), ex.StackTrace); } return mostPopular; }
private ClientResult<ResultTableCollection> ProcessQuery(ClientContext ctx, string keywordQueryValue) { KeywordQuery keywordQuery = new KeywordQuery(ctx); keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; keywordQuery.StartRow = 0; keywordQuery.SelectProperties.Add("Title"); keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SelectProperties.Add("Description"); keywordQuery.SelectProperties.Add("WebTemplate"); keywordQuery.SortList.Add("SPSiteUrl", Microsoft.SharePoint.Client.Search.Query.SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(ctx); ClientResult<ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); ctx.ExecuteQuery(); return results; }
public ResultTable Search(string keywords, List<string> properties, Dictionary<string, bool> sorting, Guid sourceID, int startRowIndex, int rowLimit) { KeywordQuery keywordQuery = new KeywordQuery(this._ctx); keywordQuery.TrimDuplicates = false; keywordQuery.QueryText = keywords; keywordQuery.SourceId = sourceID; keywordQuery.StartRow = startRowIndex; keywordQuery.RowsPerPage = rowLimit; keywordQuery.RowLimit = rowLimit; keywordQuery.SelectProperties.Clear(); if (properties != null && properties.Count > 0) { foreach (string p in properties) keywordQuery.SelectProperties.Add(p); } if (sorting != null && sorting.Count > 0) { foreach (var sort in sorting) { if (sort.Value) keywordQuery.SortList.Add(sort.Key, SortDirection.Ascending); else keywordQuery.SortList.Add(sort.Key, SortDirection.Descending); } } SearchExecutor searchExecutor = new SearchExecutor(this._ctx); ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery); this._ctx.ExecuteQuery(); return results.Value[0]; }
/// <summary> /// /// </summary> /// <param name="cc">ClientContext object of an arbitrary site collection accessible by the defined enumeration username and password</param> /// <param name="keywordQueryValue">Query to execute</param> /// <param name="sites">List of found site collections</param> /// <param name="keywordQuery">KeywordQuery instance that will perform the actual queries</param> /// <param name="startRow">Row as of which we want to see the results</param> /// <returns>Total result rows of the query</returns> private static int ProcessQuery(ClientRuntimeContext cc, string keywordQueryValue, List<string> sites, KeywordQuery keywordQuery, int startRow) { int totalRows = 0; keywordQuery.QueryText = keywordQueryValue; keywordQuery.RowLimit = 500; keywordQuery.StartRow = startRow; keywordQuery.SelectProperties.Add("SPSiteUrl"); keywordQuery.SortList.Add("SPSiteUrl", SortDirection.Ascending); SearchExecutor searchExec = new SearchExecutor(cc); ClientResult<ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery); cc.ExecuteQueryRetry(); if (results != null) { if (results.Value[0].RowCount > 0) { totalRows = results.Value[0].TotalRows; foreach (var row in results.Value[0].ResultRows) { if (row["SPSiteUrl"] != null) { sites.Add(row["SPSiteUrl"].ToString()); } } } } return totalRows; }
private static IEnumerable<TrendingDocument> GetTrendingDocuments(ClientContext clientContext, string[] actorIds) { // Build Office Graph Query string graphQueryText = null; if (actorIds.Length > 1) { StringBuilder graphQueryBuilder = new StringBuilder(); foreach (string actorId in actorIds) { if (graphQueryBuilder.Length > 0) { graphQueryBuilder.Append(","); } graphQueryBuilder.AppendFormat("actor({0},action:1020)", actorId); } graphQueryBuilder.Append(",and(actor(me,action:1021),actor(me,or(action:1021,action:1036,action:1037,action:1039)))"); graphQueryText = String.Format("or({0})", graphQueryBuilder.ToString()); } else { graphQueryText = String.Format("or(actor({0},action:1020),and(actor(me,action:1021),actor(me,or(action:1021,action:1036,action:1037,action:1039))))", actorIds[0]); } // Ensure that the Web URL is available Web web = clientContext.Web; if (!web.IsPropertyAvailable("Url")) { clientContext.Load(web, w => w.Url); clientContext.ExecuteQuery(); } // Configure Search Query KeywordQuery searchQuery = new KeywordQuery(clientContext); searchQuery.QueryText = String.Format("Path:{0}", web.Url); QueryPropertyValue graphQuery = new QueryPropertyValue(); graphQuery.StrVal = graphQueryText; graphQuery.QueryPropertyValueTypeIndex = 1; searchQuery.Properties.SetQueryPropertyValue("GraphQuery", graphQuery); QueryPropertyValue graphRankingModel = new QueryPropertyValue(); graphRankingModel.StrVal = @"{""features"":[{""function"":""EdgeWeight""}],""featureCombination"":""sum"",""actorCombination"":""sum""}"; graphRankingModel.QueryPropertyValueTypeIndex = 1; searchQuery.Properties.SetQueryPropertyValue("GraphRankingModel", graphRankingModel); searchQuery.SelectProperties.AddRange(new string[] { "Author", "AuthorOwsUser", "DocId", "DocumentPreviewMetadata", "Edges", "EditorOwsUser", "FileExtension", "FileType", "HitHighlightedProperties", "HitHighlightedSummary", "LastModifiedTime", "LikeCountLifetime", "ListID", "ListItemID", "OriginalPath", "Path", "Rank", "SPWebUrl", "SecondaryFileExtension", "ServerRedirectedURL", "SiteTitle", "Title", "ViewCountLifetime", "siteID", "uniqueID", "webID" }); searchQuery.BypassResultTypes = true; searchQuery.RowLimit = 5; searchQuery.RankingModelId = "0c77ded8-c3ef-466d-929d-905670ea1d72"; searchQuery.ClientType = "DocumentsTrendingInThisSite"; SearchExecutor searchExecutor = new SearchExecutor(clientContext); ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(searchQuery); clientContext.ExecuteQuery(); List<TrendingDocument> trendingDocuments = new List<TrendingDocument>(results.Value[0].ResultRows.Count()); foreach (var row in results.Value[0].ResultRows) { string[] lastModifiedByInfo = row["EditorOwsUser"].ToString().Split('|'); trendingDocuments.Add(new TrendingDocument( row["Title"].ToString(), row["ServerRedirectedURL"].ToString(), GetPreviewImageUrl(row, web.Url), (DateTime)row["LastModifiedTime"], lastModifiedByInfo[1].Trim(), GetUserPhotoUrl(lastModifiedByInfo[0].Trim(), web.Url))); } return trendingDocuments; }
/// <summary> /// Find the default list of tenant user profile photo thumbnails so we can use them as a source for training. /// </summary> public void findTrainingPhotosFromUserProfile() { using (ClientContext context = Login(SharePointURL)) { try { KeywordQuery keywordQuery = new KeywordQuery(context); keywordQuery.QueryText = "*"; keywordQuery.SourceId = Guid.Parse(peopleSourceID); keywordQuery.SelectProperties.Add("PictureURL"); keywordQuery.SelectProperties.Add("PreferredName"); keywordQuery.SelectProperties.Add("AccountName"); SearchExecutor searchExecutor = new SearchExecutor(context); ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery); context.ExecuteQuery(); foreach (var resultRow in results.Value[0].ResultRows) { if (resultRow["PictureURL"] != null) { string name = (string) resultRow["PreferredName"]; string imageURL = (string) resultRow["PictureURL"]; string user = (string)resultRow["AccountName"]; imageURL = imageURL.Replace("MThumb", "LThumb"); addProfilePictureToTrainingList(name, name, imageURL, "", "", user); } } } catch (Exception e) { throw; } } }
private List<string> GetHiddenProjectSites() { var siteUri = new Uri(ConfigurationManager.AppSettings["SiteCollectionRequests_SiteUrl"]); var resultsList = new List<string>(); using (var context = this.contextFactory.GetContext(siteUri.ToString())) { var keywordQuery = new KeywordQuery(context); keywordQuery.QueryText = "Project AND HiddenSite AND ContentType=\"Site Collection Metadata\""; keywordQuery.TrimDuplicates = false; keywordQuery.SelectProperties.Clear(); keywordQuery.SelectProperties.Add("SiteNumFollowers"); keywordQuery.SelectProperties.Add("SiteTitle"); keywordQuery.SelectProperties.Add("SiteMembers"); var searchExecutor = new SearchExecutor(context); var results = searchExecutor.ExecuteQuery(keywordQuery); context.ExecuteQuery(); var result = results.Value[0]; foreach (var res in result.ResultRows) { var siteTitle = res["SiteName"]; resultsList.Add(siteTitle.ToString()); } } return resultsList; }