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.

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("");
    }
}
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')
Tags:
SharePoint498 SharePoint 2007218
Potrebbe interessarti anche: