Hi,
In SharePoint 2013 central admin, through query builder we are passing one query and we are getting 4 results.
But we migrated a source code from SharePoint 2010 to SharePoint 2013 where we are getting only one result.
Earlier code in SharePoint 2010 is as below
public static DataTable KeywordSearch(List<string> selectProperties,string scope,
string searchServiceAppName,string query)
{
SearchQueryAndSiteSettingsServ iceProxy settingsProxy = SPFarm.Local.ServiceProxies. GetValue< SearchQueryAndSiteSettingsServ iceProxy>();
SearchServiceApplicationProxy searchProxy =
settingsProxy. ApplicationProxies.GetValue< SearchServiceApplicationProxy> (searchServiceAppName);
KeywordQuery keywordQuery = new KeywordQuery(searchProxy);
keywordQuery.QueryText = query;
keywordQuery.ResultsProvider = Microsoft.Office.Server. Search.Query.SearchProvider. Default;
foreach (string property in selectProperties)
{
keywordQuery.SelectProperties. Add(property);
}
keywordQuery.ResultTypes = ResultType.RelevantResults;
keywordQuery.HiddenConstraints = "scope:" + "\"" + scope + "\"";
ResultTableCollection resultsTableCollection = keywordQuery.Execute();
ResultTable searchResultsTable = resultsTableCollection[ ResultType.RelevantResults];
DataTable resultsDataTable = new DataTable();
resultsDataTable.TableName = "Results";
resultsDataTable.Load( searchResultsTable, LoadOption.OverwriteChanges);
var searchResultsTables = resultsTableCollection.Filter( "TableType", KnownTableTypes. RelevantResults);
DataTable resultsDataTable = new DataTable();
if (searchResultsTables != null && searchResultsTables.Count() > 0)
resultsDataTable = searchResultsTables. FirstOrDefault().Table;
return resultsDataTable;
}
string searchServiceAppName,string query)
{
SearchQueryAndSiteSettingsServ
SearchServiceApplicationProxy searchProxy =
settingsProxy.
KeywordQuery keywordQuery = new KeywordQuery(searchProxy);
keywordQuery.QueryText = query;
keywordQuery.ResultsProvider = Microsoft.Office.Server.
foreach (string property in selectProperties)
{
keywordQuery.SelectProperties.
}
keywordQuery.ResultTypes = ResultType.RelevantResults;
keywordQuery.HiddenConstraints = "scope:" + "\"" + scope + "\"";
ResultTableCollection resultsTableCollection = keywordQuery.Execute();
ResultTable searchResultsTable = resultsTableCollection[
DataTable resultsDataTable = new DataTable();
resultsDataTable.TableName = "Results";
resultsDataTable.Load(
var searchResultsTables = resultsTableCollection.Filter(
DataTable resultsDataTable = new DataTable();
if (searchResultsTables != null && searchResultsTables.Count() > 0)
resultsDataTable = searchResultsTables.
return resultsDataTable;
}
Modified to SharePoint 2013 as below
public static DataTable KeywordSearch(List<string> selectProperties,string scope,
string searchServiceAppName,string query)
{
SearchQueryAndSiteSettingsServ iceProxy settingsProxy = SPFarm.Local.ServiceProxies. GetValue< SearchQueryAndSiteSettingsServ iceProxy>();
SearchServiceApplicationProxy searchProxy =
settingsProxy. ApplicationProxies.GetValue< SearchServiceApplicationProxy> (searchServiceAppName);
KeywordQuery keywordQuery = new KeywordQuery(searchProxy);
keywordQuery.QueryText = query;
keywordQuery.ResultsProvider = Microsoft.Office.Server. Search.Query.SearchProvider. Default;
foreach (string property in selectProperties)
{
keywordQuery.SelectProperties. Add(property);
}
SearchObjectOwner owner = new SearchObjectOwner( SearchObjectLevel.Ssa);
SourceRecord source = searchProxy. GetResultSourceByName(scope, owner);
keywordQuery.SourceId = source.Id;
SearchExecutor executor = new SearchExecutor();
ResultTableCollection resultsTableCollection= executor.ExecuteQuery( keywordQuery);
DataTable resultsDataTable = new DataTable();
if (searchResultsTables != null && searchResultsTables.Count() > 0)
resultsDataTable = searchResultsTables. FirstOrDefault().Table;
return resultsDataTable;
}
string searchServiceAppName,string query)
{
SearchQueryAndSiteSettingsServ
SearchServiceApplicationProxy searchProxy =
settingsProxy.
KeywordQuery keywordQuery = new KeywordQuery(searchProxy);
keywordQuery.QueryText = query;
keywordQuery.ResultsProvider = Microsoft.Office.Server.
foreach (string property in selectProperties)
{
keywordQuery.SelectProperties.
}
SearchObjectOwner owner = new SearchObjectOwner(
SourceRecord source = searchProxy.
keywordQuery.SourceId = source.Id;
SearchExecutor executor = new SearchExecutor();
ResultTableCollection resultsTableCollection= executor.ExecuteQuery(
DataTable resultsDataTable = new DataTable();
if (searchResultsTables != null && searchResultsTables.Count() > 0)
resultsDataTable = searchResultsTables.
return resultsDataTable;
}
Finally our team has found solution by the including the below line
keywordQuery.SourceId = source.Id;
keywordQuery.TrimDuplicates = false;
keywordQuery.TrimDuplicates = false;
Now able to get the results exactly as per query builder in central admin
No comments:
Post a Comment