Ricerca Full Text con query SQL su SharePoint 2007
Simile all'esempio precedente che era basato su una ricerca tramite keyword, qui invece uso una query con sintassi simile all'SQL supportata dal motore di ricerca di SharePoint 2007 (MOSS).
Le query di ricerca va impostata QueryText dell'oggetto FullTextSqlQuery.
Con questo tipo di ricerca ho una maggiore flessibilità, posso impostare dei filtri (WHERE) e un ordine per i dati ritornati (ORDER BY). La clausola FROM sarà sempre FROM Scope() mentre tramite la SELECT imposto quali campi la query deve ritornare. Tutto questo non è possibile con l'oggetto KeywordQuery.
Per la clausola WHERE posso usare i normali operatori di comparazione come: !=, =, >, <, >=, <=... oppure altri costrutti come LIKE, DATEADD, NULL o quelli realtivi al fuòò-text come FREETEXT e CONTAINS.
Es.: FREETEXT('case tetti') oppure CONTAINS('mattoni')
Le query di ricerca va impostata QueryText dell'oggetto FullTextSqlQuery.
Con questo tipo di ricerca ho una maggiore flessibilità, posso impostare dei filtri (WHERE) e un ordine per i dati ritornati (ORDER BY). La clausola FROM sarà sempre FROM Scope() mentre tramite la SELECT imposto quali campi la query deve ritornare. Tutto questo non è possibile con l'oggetto KeywordQuery.
C#
string url = "http://sharepoint2007";
using (SPSite site = new SPSite(url))
{
//Microsoft.Office.Server.dll, namespace=Microsoft.Office.Server.ServerContext
//ServerContext context = ServerContext.GetContext(site);
//Microsoft.Office.Server.Search.dll, namespace=Microsoft.Office.Server.Search.Administration
//SearchContext searchContext = SearchContext.GetContext(context);
//Microsoft.Office.Server.Search.dll, namespace=Microsoft.Office.Server.Search.Query;
//FullTextSqlQuery sqlQry = new FullTextSqlQuery(context);
FullTextSqlQuery sqlQry = new FullTextSqlQuery(site);
sqlQry.Culture = new System.Globalization.CultureInfo("it-IT");
//ResultType=DefinitionResults,HighConfidenceResults,None,RelevantResults,SpecialTermResults
sqlQry.ResultTypes = ResultType.RelevantResults;
sqlQry.StartRow = 0;
sqlQry.RowLimit = 100;
sqlQry.EnableStemming = true;
sqlQry.TrimDuplicates = true;
//query for search engine
sqlQry.QueryText = @"
SELECT url, title, author, write
FROM Scope()
WHERE ""scope""='All sites'
AND write < DATEADD(Day, -3, GetGMTDate())
ORDER BY write";
//execute search
ResultTableCollection results = sqlQry.Execute();
ResultTable result = results[ResultType.RelevantResults];
//build a table
DataTable tbl = new DataTable();
tbl.Load(result, LoadOption.OverwriteChanges);
//show all item
foreach (DataRow row in tbl.Rows)
{
Console.WriteLine(string.Format("Title: {0}", row["Title"]));
Console.WriteLine(string.Format(" Url: {0}\r\n Author: {1}\r\n Write: {2}"
, row["Url"], row["Author"], row["Write"]));
Console.WriteLine("");
}
}
Es.: FREETEXT('case tetti') oppure CONTAINS('mattoni')