Ejemplo n.º 1
0
        public string GetSearchResult(string messageInput)
        {
            string k   = GetSearchKeyWord(messageInput);
            string ret = string.Empty;

            using (SPMonitoredScope scope = new SPMonitoredScope("MyCustomMessageHandler.GetSearchResult"))
            {
                //KeywordQuery keywordquery = new KeywordQuery(SPContext.Current.Site);
                //keywordquery.ResultTypes = ResultType.RelevantResults;
                //keywordquery.QueryText = string.Concat("ContentSource=", contentSourceName, " ", AppearInWeChat, "=True");
                //keywordquery.SelectProperties.Add(WeChatResult);
                //keywordquery.TrimDuplicates = false;
                //keywordquery.RowsPerPage = 0;
                //keywordquery.RowLimit = 10;
                //keywordquery.Timeout = 5000;

                //SearchExecutor searchexecutor = new SearchExecutor();
                //2013 foundation 里面的SearchExecutor这里没有
                //ResultTableCollection resulttablecollection = searchexecutor.ExecuteQuery(keywordquery);
                //ResultTable resulttable = resulttablecollection.Filter("TableType", KnownTableTypes.RelevantResults).FirstOrDefault();

                //https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ms493601(v=office.14)
                SearchServiceApplicationProxy proxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
                KeywordQuery query = new KeywordQuery(proxy);
                query.ResultsProvider = Microsoft.Office.Server.Search.Query.SearchProvider.Default;
                query.QueryText       = string.Concat("ContentSource=", contentSourceName, " ", AppearInWeChat, "=True");
                query.ResultTypes    |= ResultType.RelevantResults;
                ResultTableCollection searchResults = query.Execute();
                if (searchResults.Exists(ResultType.RelevantResults))
                {
                    ResultTable searchResult = searchResults[ResultType.RelevantResults];
                    DataTable   result       = new DataTable();
                    result.TableName = "Result";
                    result.Load(searchResult, LoadOption.OverwriteChanges);

                    StringBuilder sb = new StringBuilder();
                    foreach (DataRow r in result.Rows)
                    {
                        sb.Append(r[WeChatResult]);
                        sb.Append(System.Environment.NewLine);
                    }
                    ret = sb.ToString();
                }
            }

            return(ret);
        }
        void searchButton_Click(object sender, EventArgs e)
        {
            //Only search if there are search terms
            if (searchTermsTextbox.Text != string.Empty)
            {
                //First, we must connect to the service application proxy
                SearchServiceApplicationProxy proxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));

                //Create and configure a Keyword Query object
                KeywordQuery query = new KeywordQuery(proxy);
                query.ResultsProvider = SearchProvider.Default;
                query.QueryText       = searchTermsTextbox.Text;
                //Relevant Results are the main search results
                query.ResultTypes = ResultType.RelevantResults;
                //Now we can execute the query
                ResultTableCollection searchResults = query.Execute();

                if (searchResults.Exists(ResultType.RelevantResults))
                {
                    //There are relevant results. We need them in a Data Table
                    //so we can bind them to the Data Grid for display
                    ResultTable resultTable = searchResults[ResultType.RelevantResults];
                    //Tell the user how many results we got
                    resultsLabel.Text = String.Format("There are {0} results", resultTable.TotalRows.ToString());
                    //Set up and load the data table
                    DataTable resultDataTable = new DataTable();
                    resultDataTable.TableName = "Result";
                    resultDataTable.Load(resultTable, LoadOption.OverwriteChanges);

                    //Bind the datatable to the Data Grid
                    resultsGrid.DataSource = resultDataTable;
                    resultsGrid.DataBind();
                }
                else
                {
                    //Search executed but found nothing
                    resultsLabel.Text = "There were no relevant results. Try other search terms";
                }
            }
            else
            {
                //No search terms in the textbox
                resultsLabel.Text = "Please enter at least one search term";
            }
        }
        public bool Exists(string resultType)
        {
            ResultType rt;

            return(resultType.TryParseEnum(true, out rt) && m_resultTableCollection.Exists(rt));
        }