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();
         };

      }
Esempio n. 6
0
        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);
        }
Esempio n. 8
0
        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();
        }
Esempio n. 9
0
        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);
        }
Esempio n. 11
0
        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);
            }
        }
Esempio n. 13
0
        //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);
            }
        }
Esempio n. 15
0
        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;
            }
        }
Esempio n. 16
0
        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);
        }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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);
            }
        }
Esempio n. 22
0
        // 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);
        }
Esempio n. 23
0
        //按时间显示开始的十条
        /// <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]);
        }
Esempio n. 25
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);
            }
        }
Esempio n. 26
0
        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();
            }
        }
Esempio n. 27
0
        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");
        }
Esempio n. 28
0
        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");
        }
Esempio n. 29
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");
        }
Esempio n. 30
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);
        }
Esempio n. 31
0
        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");
        }
Esempio n. 32
0
        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");
        }
Esempio n. 33
0
        //
        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();
            }
        }
Esempio n. 34
0
        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);
            }
        }
Esempio n. 35
0
        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);
        }
Esempio n. 36
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);

            // 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);
        }
Esempio n. 37
0
        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);
            }
        }
Esempio n. 38
0
        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();
                            }
                        }
                    }
                });
            }
        }
Esempio n. 39
0
        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>();
        }
Esempio n. 40
0
        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;
        }
Esempio n. 41
0
        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;
        }
Esempio n. 42
0
        /// <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;
        }
Esempio n. 43
0
        // 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;
        }
Esempio n. 44
0
        /// <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;
        }
Esempio n. 45
0
        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;
        }
Esempio n. 49
0
        /*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;
        }
Esempio n. 50
0
        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);
            }
        }
Esempio n. 51
0
        /// <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];
        }
Esempio n. 54
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;
        }