using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.Office.Server;
using Microsoft.Office.Server.Search;
using Microsoft.Office.Server.Search.Query;
using Microsoft.Office.Server.Search.Administration;
using System.Data;
namespace SharePointCustomSearchWP.searchWP
{
[ToolboxItemAttribute(false)]
public class searchWP : WebPart
{
protected Button btnSearch;
protected TextBox txtSearchBox;
protected Label lblResults;
protected GridView gridSearchResults;
protected override void CreateChildControls()
{
txtSearchBox = new TextBox();
this.Controls.Add(txtSearchBox);
lblResults = new Label();
this.Controls.Add(lblResults);
btnSearch = new Button();
btnSearch.Text = "Find";
btnSearch.Click += new EventHandler(btnSearch_Click);
this.Controls.Add(btnSearch);
}
void btnSearch_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtSearchBox.Text))
{
lblResults.Text = "Please enter words to search for";
return;
}
ExecuteKeywordQuery(txtSearchBox.Text);
}
void ExecuteKeywordQuery(string keywordQueryText)
{
//Get a proxy for Search Service Application(SSA). The SSA serves search queries.
SearchServiceApplicationProxy SSAProxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
KeywordQuery keywordQuery = new KeywordQuery(SSAProxy);
//keyword search using default provider. We can use "FAST" or "SharepointSearch" to be specific.
keywordQuery.ResultsProvider = SearchProvider.Default;
keywordQuery.QueryText = keywordQueryText;
keywordQuery.ResultTypes |= ResultType.RelevantResults;
ResultTableCollection searchResults = keywordQuery.Execute();
if (searchResults.Exists(ResultType.RelevantResults))
{
ResultTable searchResult = searchResults[ResultType.RelevantResults];
DataTable result = new DataTable();
result.TableName = "SearchResults";
result.Load(searchResult, LoadOption.OverwriteChanges);
PopulateResultsGrid(result);
}
}
private void PopulateResultsGrid(DataTable resultsTable)
{
gridSearchResults = new GridView();
gridSearchResults.DataSource = resultsTable;
gridSearchResults.DataBind();
Controls.Add(gridSearchResults);
}
protected override void Render(HtmlTextWriter writer)
{
writer.Write(" txtSearchBox.RenderControl(writer); writer.Write(" btnSearch.RenderControl(writer); writer.Write(" lblResults.RenderControl(writer); writer.Write(" if (gridSearchResults != null) gridSearchResults.RenderControl(writer); writer.Write("
");"); "); "); ");
}
}
}
Manesh GolekarPosted Jun 30, 2014, 5:48 AM
1. Create a new scope and add Scope Rule to filter data from particular site url
2. update your KeywordQuery class QueryText to below
keywordQuery.QueryText = keywordQueryText + "and scope:<
Thats it .. your result will show expected data ..
Thanks,
M